首頁 > 後端開發 > Python教學 > 在循環中建立 Lambda 時如何防止 Lambda 閉包混亂?

在循環中建立 Lambda 時如何防止 Lambda 閉包混亂?

Barbara Streisand
發布: 2024-11-08 16:22:01
原創
1045 人瀏覽過

How Do You Prevent Lambda Closure Confusion When Creating Lambdas in Loops?

防止循環中的Lambda 閉包混淆

在迭代物件清單的循環內建立lambda 時,重要的是要注意lambda 閉包行為。預設情況下,lambda 在定義時會捕獲封閉範圍內的變數。但是,如果變數在循環內發生更改,則稍後在循環中建立的 lambda 將引用更新的值。

考慮以下範例,其中我們建立lambda 來存取物件的some_var 屬性:

lambdas_list = []
for obj in obj_list:
    lambdas_list.append(lambda: obj.some_var)
登入後複製

如果我們隨後迭代lambda 清單並呼叫每個lambda,我們可能會為所有lambda 獲得相同的值。這是因為循環中創建的最後一個 lambda 將捕獲 obj 的最終狀態,並且該值將由所有 lambda 傳回。

為了解決這個問題,我們可以使用 lambda 指定要擷取的物件預設參數。這可確保每個 lambda 捕獲正確的物件參考:

lambdas_list.append(lambda obj=obj: obj.some_var)
登入後複製

透過使用此方法,每個 lambda 將捕獲它在創建時要引用的物件。這將防止混淆並確保 lambda 在循環中稍後調用時按預期運行。

以上是在循環中建立 Lambda 時如何防止 Lambda 閉包混亂?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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