循環中的 Lambda 函數
在 Python 中,lambda 函數提供了定義匿名函數的簡潔方法。然而,當在循環中使用時,如果不能確保正確的綁定,它們可能會導致意外的行為。
考慮以下程式碼片段:
目的是建立一個字典映射指令更改目錄的函數的字串。然而,結果卻出乎意料:創建的兩個 lambda 函數是相同的,並且執行相同的命令,將目錄更改為“login”。
為什麼會發生這種情況?
循環內的 Lambda 函數共享相同的函數作用域。這意味著 lambda 函數捕獲的變數對於循環的所有迭代都是相同的。在本例中,「d」代表「directorys」字典中最後一項的值,即「login」。
解決問題
確保正確的綁定,我們需要確保每個 lambda 函數都可以存取自己唯一的「d」值。一種方法是將“d”作為具有預設值的參數傳遞:
透過在循環的每次迭代中將“d”的預設值設為“d”的當前值,我們為每個lambda 函數建立一個唯一的閉包。或者,我們可以使用額外的閉包技術來實現相同的結果:
這個外部lambda 函數為“d”創建一個閉包,而內部lambda 函數使用閉包中的“d” 。
以上是為什麼 Python 循環中的 Lambda 函數有時無法正確綁定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!