在 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 捕獲自己的變數實例,確保預期的輸出:
“做”
“重新”
“我”
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3