首頁 > 後端開發 > Python教學 > 閉包如何影響巢狀 Python 函數中的局部變數存取?

閉包如何影響巢狀 Python 函數中的局部變數存取?

Linda Hamilton
發布: 2024-12-18 09:29:18
原創
409 人瀏覽過

How Do Closures Affect Local Variable Access in Nested Python Functions?

巢狀函數中的局部變數:閉包與尋找的故事

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板