1

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

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

1 回答 1

2

它失败是因为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)])()
于 2013-04-18T03:45:32.160 回答