2013-04-24 119 views
1

強權似乎是一個nooby問題(myabe它是),但爲什麼蟒蛇的行爲那樣:Python和lambda函數

>>>a = [] 
>>>for i in xrange(5): 
... a.append(lambda: i + 1) 

>>>a[0]() 
5 
>>>a[1]() 
5 
>>>a[2]() 
5 
>>>a[3]() 
5 
>>>a[4]() 
5 

當有存儲在不同的功能:

>>aaa 
[<function <lambda> at 0x100499d70>, <function <lambda> at 0x100499e60>, <function <lambda> at 0x100499ed8>, <function <lambda> at 0x100499de8>, <function <lambda> at 0x10049f050>] 

或者我錯過了一些在Python文檔中非常重要的東西?

回答

6

關閉建立在i的值上,最終值爲4

如果你想保持i裏面的lambda你可以使用默認的變量。

>>>for i in xrange(5): 
... a.append(lambda x=i: x + 1) 
+0

究竟是我在找什麼。總而言之,我錯了一些重要的東西(執行時間和命名空間)。缺省參數在函數名稱空間中存儲值。謝謝! – 2013-04-24 13:33:38