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