巢狀函數中的局部變數:閉包與尋找的故事
在Python 中,巢狀函數中定義的局部變數可以與周圍的互動範圍。為了理解這種交互,讓我們深入研究突出顯示該行為的程式碼片段。
from functools import partial class Cage(object): def __init__(self, animal): self.animal = animal def gotimes(do_the_petting): do_the_petting() def get_petters(): for animal in ['cow', 'dog', 'cat']: cage = Cage(animal) def pet_function(): print "Mary pets the " + cage.animal + "." yield (animal, partial(gotimes, pet_function)) funs = list(get_petters()) for name, f in funs: print name + ":", f()
不明確的賦值
運行此程式碼會產生意外結果:「Mary pets為所有三種動物(「牛」、「狗」和“貓”)列印“貓”。中的局部變數籠被捕獲為閉包單元。在這種情況下,cage 是pet_function中唯一的自由變量,並且綁定到閉包單元。 🎜>
但是,當執行巢狀函數時,就會出現問題。籠變數已經被指派「cat」作為其最終值。的作用域。 >新函數作用域:建立一個新的巢狀函數,在其自己的中捕獲所需的參數
綁定預設值:將變數作為預設參數值綁定到巢狀函數。 >
透過使用這些解決方法,我們可以確保巢狀函數可以存取正確的局部變數並避免程式碼中出現歧義。
以上是閉包如何影響巢狀 Python 函數中的局部變數存取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!