首頁 > 後端開發 > Python教學 > 如何在 Python 中修改非全域封閉作用域中的變數?

如何在 Python 中修改非全域封閉作用域中的變數?

Susan Sarandon
發布: 2024-12-28 05:01:09
原創
585 人瀏覽過

How Can I Modify Variables in a Non-Global, Enclosing Scope in Python?

在Python 中修改非全域、封閉作用域中的變數

使用巢狀函數時,通常需要存取和修改定義的變數在既不是全域的也不是透過動態作用域可存取的封閉作用域中。這可能會給實現詞法作用域的 Python 帶來挑戰。

考慮以下範例:

def A():
    b = 1
    def B():
        # Can access 'b' but cannot modify it directly
        print(b)
    B()
A()
登入後複製

在此程式碼中,變數 b 是在 B() 的封閉作用域中定義的。功能。然而,嘗試在 B() 中直接修改 b 會導致 UnboundLocalError,因為它沒有宣告為 B() 的本機錯誤。

為了解決這個問題,Python 提供了兩種解決方案:

Python 3: 使用nonlocal 關鍵字

在Python 3 上,nonlocal關鍵字可讓您修改最近封閉中的變數範圍不包括全域變數。使用方法如下:

def foo():
    a = 1
    def bar():
        nonlocal a
        a = 2
    bar()
    print(a)  # Output: 2
登入後複製

在此範例中,nonlocal 關鍵字在 bar() 函數中建立一個非局部變量,從而可以對其進行修改。

Python 2 :使用可變對象

在Python 2上,nonlocal不可用,你可以使用可變對象,例如作為列表或字典。您可以改變物件的值,而不是重新指派變數:

def foo():
    a = []
    def bar():
        a.append(1)
    bar()
    bar()
    print(a)  # Output: [1, 1]
登入後複製

這裡,a 變數是可變的,bar() 函數可以透過追加到列表來修改其值。

以上是如何在 Python 中修改非全域封閉作用域中的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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