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

為什麼循環中的 Lambda 函數只會傳回最後一個值?

DDD
發布: 2024-12-13 14:36:13
原創
442 人瀏覽過

Why Do Lambda Functions in Loops Only Return the Last Value?

For 循環中的Lambda 僅獲取最後一個值

在for 循環中使用應該捕獲不同值的lambda 函數時,會出現當前的問題的局部變數。然而,據觀察,當這些 lambda 被呼叫時,它們始終會傳回分配給局部變數的最終值,儘管它在循環內發生變化。

理解問題

這種令人困惑的行為源自於 lambda 函數的求值時機。具體來說,lambda 函數體內使用的名稱是在函數執行時而不是定義時計算的。

解決方案

要解決此問題,它對於在 lambda 定義時(而不是在調用它時)捕獲局部變量的值至關重要。一種方法是將要捕獲的變數宣告為 lambda 函數的參數。

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

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

透過在冒號之前設定“option=option”,我們將“option”的值明確分配為lambda 函數的參數,確保每個 lambda 捕獲預期值。

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

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