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