Я думаю, что я знаю, как переменные и генераторы работают на Python. Однако следующий код меня смущает.
from __future__ import print_function
class A(object):
x = 4
gen = (x for _ in range(3))
a = A()
print(list(a.gen))
При запуске кода (Python 2) он говорит:
Traceback (most recent call last): File "Untitled 8.py", line 10, in <module> print(list(a.gen)) File "Untitled 8.py", line 6, in <genexpr> gen = (x for _ in range(3)) NameError: global name 'x' is not defined
В Python 3 говорится: NameError: name 'x' is not defined
но, когда я запускаю:
from __future__ import print_function
class A(object):
x = 4
lst = [x for _ in range(3)]
a = A()
print(a.lst)
Код не работает в Python 3, но он работает в Python 2 или в такой функции, как
from __future__ import print_function
def func():
x = 4
gen = (x for _ in range(3))
return gen
print(list(func()))
Этот код хорошо работает в Python 2 и Python 3 или на уровне модуля
from __future__ import print_function
x = 4
gen = (x for _ in range(3))
print(list(gen))
Код хорошо работает и в Python 2 и Python 3.
Почему это неправильно в class
?