了解 Lambda 函數中的閉包捕獲
Python 閉包捕獲定義它們的封閉範圍的狀態。具體來說,它們捕獲 lambda 函數中引用的變數的值,這些變數不存在於其作用域中。
在提供的範例中,lambda 函數捕捉變數 i,該變數在循環執行時被分配不同的值。但是,lambda 函數不會捕獲對 i 所指向的物件的參考。相反,它們在創建時捕獲 i 的值。
此行為解釋了呼叫 adders[1](3) 時出現意外結果 6。儘管期望引用整數對象,但 lambda 函數捕獲了值 3,這是分配給 i 的最終值。
實作在每個 lambda 函數中保留 i 當前值的所需行為,可以採用稱為參數預設值的技術。透過向 lambda 函數提供預設參數,i 在建立時的值將被鎖定。例如:
在這種情況下,參數 i 的預設值設定為目前值i 的值。當呼叫 lambda 函數時,它使用在建立過程中捕獲的 i 值。
此方法可確保 adders 數組中的每個 lambda 函數捕獲 i 的預期值,從而允許它們產生預期的值調用時輸出。
以上是為什麼 Python Lambda 函數會捕獲值而不是引用,如何解決這個問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!