理解Python类中的变量范围

时间:2013-04-18 03:35:17

标签: python class variables scope

有人可以解释为什么会失败:

class A:
   a = 42
   b = list(a + i for i in range(10))

1 个答案:

答案 0 :(得分:2)

失败是因为a不在生成器表达式可以看到的命名空间中。

这适用于Python2和Python3。带有默认参数的lambda是在生成器表达式可以看到的命名空间中获取a引用的技巧。

>>> class A:
...    a = 42
...    b = (lambda a=a:list(a + i for i in range(10)))()
... 
>>> A.b
[42, 43, 44, 45, 46, 47, 48, 49, 50, 51]

我认为使用b的列表理解更清晰

...    b = (lambda a=a:[a + i for i in range(10)])()
相关问题