理解 Lambda 函數中的閉包捕獲
在 Python 中,lambda 函數中閉包的特殊行為讓開發人員感到困惑。本文深入探討了閉包捕獲的複雜性,準確解釋了捕獲的內容以及如何控制捕獲機制。
捕獲機制
Lambda 函數閉包捕獲來自他們的封閉範圍。這些變數在創建閉包時被有效地凍結。在提供的範例中,lambda 函數從 for 迴圈捕獲 i 的值。然而,當在後續循環迭代中修改 i 時,捕獲的值在閉包中保持不變。
控制捕獲
捕獲變數的當前值,而不是比最終值,可以添加一個帶有預設值的虛擬參數。這種技術強制閉包在建立閉包時捕捉變數的值。
在修改後的程式碼中:
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i + a # dummy parameter with default value
虛擬參數 i 的預設值為循環中的電流 i。因此,每個 lambda 函數在創建時都會捕獲 i 的值,從而導致 adders[1](3) 傳回 4 的預期行為。
結論
透過了解Python中的閉包捕獲機制,開發者可以有效地控制和操作閉包。使用具有預設值的虛擬參數提供了一種捕獲變數當前值的可靠方法,確保程式碼的正確執行。
以上是Python Lambda 函數如何處理閉包捕獲,以及如何控制它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!