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

Susan Sarandon
發布: 2024-10-21 18:40:03
原創
364 人瀏覽過

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

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!