首頁 > 後端開發 > Python教學 > 為什麼 Python Lambda 函數會捕獲值而不是引用,如何解決這個問題?

為什麼 Python Lambda 函數會捕獲值而不是引用,如何解決這個問題?

Barbara Streisand
發布: 2024-12-27 10:18:10
原創
530 人瀏覽過

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

了解 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板