」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在迴圈中正確捕捉 Lambda 函數中的變數?

如何在迴圈中正確捕捉 Lambda 函數中的變數?

發佈於2024-11-07
瀏覽:726

How to Properly Capture Variables in Lambda Functions in Loops?

在 Lambda 函數中捕獲變數

在循環中使用 lambda 函數時,了解其變數範圍非常重要。與複製局部變數的常規函數不同,lambda 函數引用它們。

考慮給定的代碼:

for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))

這裡,lambda 函數從封閉範圍捕捉 m 的值。然而,循環結束後,m 保留最後一個值('mi')。當呼叫每個 lambda 函數時,它會引用此共享 m 變量,從而多次產生輸出「mi」。

要克服此問題並確保每個lambda 捕獲m 的不同值,請使用一種稱為“預設參數":

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))

透過使m 成為同名的預設參數,每個lambda 捕獲自己的變數實例,確保預期的輸出:

“做”
“重新”
“我”

版本聲明 本文轉載於:1729329734如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3