首頁  >  文章  >  後端開發  >  Python 中的巢狀函數可以修改封閉作用域中的變數嗎?

Python 中的巢狀函數可以修改封閉作用域中的變數嗎?

Susan Sarandon
Susan Sarandon原創
2024-10-21 18:40:03350瀏覽

Can Nested Functions Modify Variables in Enclosing Scopes in Python?

巢狀函數作用域中的未綁定局部變數

在Python 中,巢狀函數存取其封閉作用域中定義的變量,從而實現程式碼重用和封裝。但是,如果變數未宣告為非本地或全域,則嘗試修改巢狀函數內封閉範圍內的變數可能會導致「UnboundLocalError」。

請考慮以下程式碼:

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1</code>

當你呼叫inner()時,你會遇到“UnboundLocalError”,因為ctr沒有在inner函數中定義。要解決此問題,您可以使用以下方法:

對於Python 3 及更高版本:

使用nonlocal 關鍵字

nonlocal 關鍵字允許您從巢狀函數中修改封閉範圍內定義的變數。

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1</code>

對於Python 2 及更早版本:

使用資料結構保存變數

在Python 2 中,巢狀函數無法修改封閉作用域中的變量,因此必須使用資料結構來保存變數並將其傳遞給巢狀函數。

<code class="python">def outer():
    ctr = [0]

    def inner():
        ctr[0] += 1</code>

取代所有出現的在程式碼中使用 ctr[0].

以上是Python 中的巢狀函數可以修改封閉作用域中的變數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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