有人可以解释为什么这会失败:
class A:
a = 42
b = list(a + i for i in range(10))
它失败是因为a
不在生成器表达式可以看到的命名空间中。
这适用于 Python2 和 Python3。a
带有默认参数的 lambda 是一种在生成器表达式可以看到的命名空间中获取引用的技巧。
>>> 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)])()