首頁 > 後端開發 > Python教學 > 為什麼 Python For 循環中的 Lambda 函數只捕獲最後一個值?

為什麼 Python For 循環中的 Lambda 函數只捕獲最後一個值?

Linda Hamilton
發布: 2024-12-06 02:29:10
原創
484 人瀏覽過

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

for 迴圈中的 Lambda 只取得最後一個值

在 for 迴圈中使用 lambda 函數時,lambda 擷取的值可能不是預期的值。這個問題的出現​​是由於 Python 垃圾回收的運作方式,導致只保留變數的最後一個值。

為了說明這個概念:

options = ["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option = options[i]
    __cMenu.add_command(
        label="{}".format(option),
        command=lambda: self.filter_records(column, option)
    )
登入後複製

在此程式碼中,每個lambda 函數應該捕獲選項的唯一值,但所有選項的行為就像選項被設定為“DEBUG” ,它在循環中假定的最終值。

要解決這個問題,正如解決方案中所建議的,每個 lambda 函數必須捕獲自己的變數。這可以透過為option 分配一個新的局部變數來實現,如下所示:

for i in range(len(options)):
    opt = options[i]  # Assign a new variable to capture the unique value
    __cMenu.add_command(
        label="{}".format(opt),
        command=lambda: self.filter_records(column, opt)
    )
登入後複製

或者,可以如下重寫lambda 表達式:

lambda opt=option: self.filter_records(column, opt)  # Differentiate loop variable and function parameter
登入後複製

透過捕獲適當的值, lambda 函數可以在循環內獨立運行,從而實現預期的行為。

以上是為什麼 Python For 循環中的 Lambda 函數只捕獲最後一個值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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