執行時,代碼出乎意料地打印: mi mi 做 關於 mi
,而不是預期的輸出:理解lambda函數及其參數的範圍至關重要。與常規功能不同,lambda功能引用了創建它們的周圍環境。該引用包括Lambda主體內使用的變量。
在不正確的方法中使用迭代器時,對於循環中的每個元素m,它會創建一個新的lambda函數,引用相同的變量m。但是,循環完成後,變量m引用循環中的最後一個元素,即“ mi”。因此,當執行回調函數時,它們都使用更新的引用。 解決此問題的解決方案可以捕獲lambda函數的lambda函數的值for IT作為deveault of optional參數(a optional參數),我們可以捕獲lambda函數的值
。 're','mi'): Funclist.Append(lambda m = m:callback(m))現在,在每個lambda函數中,m被捕獲為局部變量,並且在循環完成時將其值保留。因此,當執行回調函數時,它們會打印正確的值,從而產生預期的輸出。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3