2013-04-18 64 views

回答

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] 

使用列表修真0​​在我看來更清晰

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