0

看看这个简单的 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
4

2 回答 2

1

这是与 py2.x 相关的行为。在 py2.x 中,列表推导没有自己的范围。因此,在您的情况下,列表推导实际上修改了变量x,并且在列表推导末尾x分配了值,因此您将同时获得和。33A().xA.x

在 py3.x 中,这已得到修复

...特别是循环控制变量不再泄漏到周围的范围内。

于 2013-07-27T14:46:49.287 回答
0

您已经覆盖x了列表推导中的 。应该使用另一个名字。

于 2013-07-27T14:43:40.240 回答