Myślę, że wiem, jak zmienne i generatory działają dobrze w Pythonie.
Jednak poniższy kod mnie wprawia w zakłopotanie.Zmienny zakres w generatorach w klasach
from __future__ import print_function
class A(object):
x = 4
gen = (x for _ in range(3))
a = A()
print(list(a.gen))
Kiedy uruchomić kod (Python 2), to mówi:
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
W Pythonie 3, to mówi NameError: name 'x' is not defined
ale, gdy uruchomię:
from __future__ import print_function
class A(object):
x = 4
lst = [x for _ in range(3)]
a = A()
print(a.lst)
Kod
Kod nie działa w Pythonie 3, ale działa w Pythonie 2 lub Funkcja jak ten
from __future__ import print_function
def func():
x = 4
gen = (x for _ in range(3))
return gen
print(list(func()))
ten kod działa dobrze w Pythonie 2 i 3 lub Python na poziomie modułu
from __future__ import print_function
x = 4
gen = (x for _ in range(3))
print(list(gen))
Kod działa dobrze w Pythonie 2 i Python 3 też.
Dlaczego jest źle w class
?
oświadczenie, że "jest wykonywane poza klasą (jako że generatory są obliczane w czasie wykonywania) i sprawdza odniesienie x ** w bieżącym zakresie **" może być argumentowane. zobacz ten http://ideone.com/bgef81 wynik to [6,6,6], a nie [5,5,5], dlaczego? – WeizhongTu