首頁 >後端開發 >Python教學 >如何避免 Lambda 函數會因為共享作用域變數而出現意外行為?

如何避免 Lambda 函數會因為共享作用域變數而出現意外行為?

Barbara Streisand
Barbara Streisand原創
2024-10-19 17:25:30363瀏覽

How to Avoid Unexpected Behavior in Lambda Functions Due to Shared Scope Variables?

Lambda 函數及其參數的作用域行為

當建立 lambda 函數時,它會繼承其封閉函數的作用域。然而,當使用迭代器循環產生一系列 lambda 函數時,會出現一個常見的誤解。在這種情況下,lambda 函數共享相同的作用域變量,從而導致意外結果。

考慮以下簡化程式碼:

預期輸出為:

然而,實際輸出是:

發生這種情況是因為lambda 函數在建立時保留了對封閉範圍內的共享變數m 的參考。當執行 lambda 函數時,m 已重新指派給“mi”,從而導致意外的輸出。

要解決此問題,可以使用具有預設值的可選參數。這允許每個lambda 函數捕獲自己的變數值:

透過此修改,每個lambda 函數在建立時都會維護m 值的不同副本,從而產生所需的輸出:

以上是如何避免 Lambda 函數會因為共享作用域變數而出現意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn