我在python循環中遇到了一些使用lambda函數的奇怪行爲。當我嘗試將lambda函數分配給列表中的字典條目時,以及在函數中使用字典中的其他條目時,只有最後一次循環纔是評估的lambda運算符。所以所有的功能最終都具有相同的價值!Python循環中的lambda運算符
下面是精簡的代碼,它捕獲我正在嘗試的那些行爲奇怪的部分。我的實際代碼更復雜,並不像這樣微不足道,所以我正在尋找一個解釋,最好是一種解決方法。
n=4
numbers=range(n)
entries = [dict() for x in numbers]
for number, entry in zip(numbers,entries):
n = number
entry["number"] = n
entry["number2"] = lambda x: n*1
for number in numbers:
print(entries[number]["number"], entries[number]["number2"](2))
輸出是:
0 3
1 3
2 3
3 3
換句話說,詞典entires這只是整數都很好,並通過循環正確填寫。但lambda函數 - 這是微不足道的,應該只返回與「數字」條目相同的值 - 全部設置爲最後一遍。
發生了什麼事?
很好的答案,雖然我會刪除註釋:「#可選:del lim,除非稍後有必要」。我不認爲有必要在這裏解除來自全局命名空間的'lim'引用。除了一些古怪的情況,'del'通常被認爲是不好的風格,並沒有被使用。對於這樣一個簡單的腳本,將一個單引用整數解除綁定將是非傳統的,不混淆的。 –
不會假裝知道關於高級Python約定的任何事情。我的大部分蟒蛇知識都是作爲一個愛好者。謝謝。 – BHustus