首頁 > 後端開發 > Python教學 > Python 的「nonlocal」關鍵字與作用域管理中的「global」有何不同?

Python 的「nonlocal」關鍵字與作用域管理中的「global」有何不同?

Mary-Kate Olsen
發布: 2024-12-11 19:05:11
原創
889 人瀏覽過

How Does Python's `nonlocal` Keyword Differ from `global` in Scope Management?

理解「nonlocal」在Python 3 中的作用

在Python 3 中,「nonlocalhon」在存取定義在Python 中的變數中起著至關重要的作用。一個封閉範圍,但在目前範圍之外。與引用全域作用域中的變數的「global」不同,「nonlocal」可讓您與父函數作用域中的變數進行互動。

在不使用「nonlocal」的情況下考慮此範例:

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)
登入後複製

輸出:

inner: 2
outer: 1
global: 0
登入後複製

我們可以看到,內部函數中的變數「 x”被賦值為局部值2,而外部函數中的變數“x”保持為1。全域變數“x”保留其初始值0。

現在,讓我們使用“nonlocal”重寫這段程式碼:

x = 0
def outer():
    x = 1
    def inner():
        nonlocal x
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)
登入後複製

輸出:

inner: 2
outer: 2
global: 0
登入後複製

使用“nonlocal”,內部函數中的變數“x”現在綁定到該變數外部函數中的“x”。因此,當內部函數中修改“x”時,也會影響其在外部函數中的值。全域變數“x”保持不變。

相反,「global」會將內部函數中的變數「x」綁定到全域範圍內的變數:

x = 0
def outer():
    x = 1
    def inner():
        global x
        x = 2
        print("inner:", x)
        
    inner()
    print("outer:", x)

outer()
print("global:", x)
登入後複製

輸出:

inner: 2
outer: 1
global: 2
登入後複製

理解「非局部」和「全局」之間的細微差別對於有效管理Python 程式碼中的變數至關重要。

以上是Python 的「nonlocal」關鍵字與作用域管理中的「global」有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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