有人可以解释为什么会失败:
class A:
a = 42
b = list(a + i for i in range(10))
答案 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)])()