2013-12-12 75 views
3

任何人都可以進行理智檢查嗎?Python:將lambda函數添加到列表中

我想在循環中做功能。 我不明白的一點是總結如下代碼:

f_list = [] 
for i in range(10): 
    f = lambda j : i 
    f_list.append(f) 

然後,

>>> f_list[0](0) 
9     #I hope this is 0. 
>>> f_list[1](0) 
9     #I hope this is 1. 

這是爲什麼呢?發生

+0

感謝您的指點出過去的問題/答案。是的,這實際上是它們的重複。 – ywat

回答

4

編輯:在Stackoverflow中已經討論過幾乎相同的問題,here

這是因爲python的關閉屬性。爲了得到你真正需要的,你需要做這樣的

f = lambda j, i = i : i 

因此,該程序的輸出變成這樣

f_list = [] 
for i in range(5): 
    f = lambda j, i = i : i 
    f_list.append(f) 

for i in range(5):  
    print f_list[i](0) 

輸出

0 
1 
2 
3 
4 
+0

謝謝你的簡單答案。我明白這一點。 – ywat