看看这个简单的Python代码:
class A:
x = 123
y = [(x,x*x) for x in [1,2,3]]
print A().x
A.x
为123
,但当我A().x
时,会打印3
。为什么呢?
$ python a.py
3
答案 0 :(得分:1)
这是与py2.x相关的行为。在py2.x中,列表推导没有自己的范围。因此,您案例中的列表理解实际上修改了变量x
,并且在列表理解结束时为x
分配了值3
,因此您将获得3
A().x
和A.x
。
...特别是循环控制变量不再泄露 进入周围范围。