第一種方式:
python 2:
class A(object):
x = 4
gen = (x for _ in range(5))
a = A()
print(list(a.gen))
result:
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
python3 result: NameError: name 'x' is not defined
第二種方式:
class A(object):
x = 4
list = [x for _ in range(3)]
a = A()
print(a.list)
這種方式在Python2 中是可以的, 但是在Python3 裏面是不行的。
第三種方式
def func():
x = 4
gen = (x for _ in range(3))
return gen
print (list(func()))
上面代碼在Python3 & Python2 的model級別都是通用的
第四種方式
x = 4
gen = (x for _ in range(3))
print(list(gen))
這個也在python3 & python2 裏面通用
僅僅當生成器作爲類變量時,他會在類外部執行(因爲在運行時會評估生成器), 並檢查當前作用域中x的引用。 由於x在該範圍內未初始化, 因此會引發錯誤