当类在定义中具有列表解析时,变量会被更改?

时间:2013-07-27 14:40:57

标签: python

看看这个简单的Python代码:

class A:
    x = 123
    y = [(x,x*x) for x in [1,2,3]]

print A().x

A.x123,但当我A().x时,会打印3。为什么呢?

$ python a.py 
3

1 个答案:

答案 0 :(得分:1)

这是与py2.x相关的行为。在py2.x中,列表推导没有自己的范围。因此,您案例中的列表理解实际上修改了变量x,并且在列表理解结束时为x分配了值3,因此您将获得3 A().xA.x

In py3.x this has been fixed

  

...特别是循环控制变量不再泄露   进入周围范围。