循環內的Lambda:解決共享狀態
在Python 中,循環內創建的lambda 可能會因共享狀態而表現出意外的行為。作為範例,請考慮以下旨在建立存取物件屬性的lambda 表達式的程式碼:
lambdas_list = [] for obj in obj_list: lambdas_list.append(lambda : obj.some_var)
但是,在迭代並呼叫這些lambda 表達式時,總是會得到最後一個物件的屬性值:
for f in lambdas_list: print(f())
要解決此限制,可以進行簡單的修改:
lambdas_list.append(lambda obj=obj: obj.some_var)
透過提供lambda 的預設參數,物件的當前值在建立時捕獲。這確保每個 lambda 保留自己的狀態,並獲得所需的結果:
for f in lambdas_list: print(f())
以上是為什麼 Python 循環內的 Lambda 共享狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!