Спасибо тебе за это! Я читал о списочном понимании, имеющем собственную область, но я не установил связь до сих пор.
от вопрос уже есть ответ здесь:
Python: как я могу запустить eval () в локальной области функции 2 ответаРассмотрим следующий гипотетический код:
class B(object):
def __init__(self):
self.b = 2
def foo(self):
out1 = [eval('self.b')] # ok
print(out1) # prints: [2]
out2 = [eval(cmd) for cmd in ['self.b']] # fails
print(out2) # NameError: name 'self' is not defined
b = B()
b.foo()
Почему утверждение дляout1
хорошо, но не дляout2
, что дает ошибку "Я" не определен "?
Я изучаю Python, и я решил эту проблему, экспериментируя сeval
, Да, я знаю использованиеeval
в этом примере неуместно, но просто ради того, чтобы взять этот пример за чистую монету, кто-то может объяснить, почему утверждение дляout2
выдает сообщение об ошибке? Кажется, оба утверждения должны работать и давать одинаковый результат.
Спасибо за любые рекомендации.