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

Python 的「nonlocal」關鍵字與巢狀函數作用域中的「global」有何不同?

DDD
發布: 2024-12-19 22:05:11
原創
980 人瀏覽過

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

Python 3 中「非局部」的力量

在 Python 程式設計中,變數可以根據其範圍進行分類:

  • 全域:
  • 可在整個程式中訪問,包括巢狀函數。
  • 本地:
  • 僅在特定函數或區塊內定義和存取。

但是,有時您需要彌合這些範圍之間的差距。這就是“nonlocal”關鍵字發揮作用的地方。

理解「nonlocal」

「nonlocal」在 Python 3 中用來宣告存在於 a 中的變數範圍較廣,但未宣告為全域。它允許您存取和修改封閉函數中的變量,而不影響同名的全域變量。

「非局部」的影響

為了說明差異,請考慮下面的例子沒有"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
登入後複製

在這種情況下,inner() 函數中的變數 x被視為一個新的局部變量,獨立於external() 函數和全局x.

現在,讓我們使用以下命令修改代碼"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”關鍵字允許inner()函數中的x變數引用和修改x變數在outer()函數中。在inner()函數中所做的修改會保留在outer()函數中。

與“global”的區別

“nonlocal”與“global”關鍵字不同因為它允許從封閉的範圍訪問和修改變量,而“全局”則從真正的全域範圍存取和修改變數。

使用上面範例中的「global」將產生以下輸出:
inner: 2
outer: 1
global: 2
登入後複製

在這種情況下,inner() 函數中的x 變數將綁定到全域x,任何更改都會影響該值全域變量,而不是outer()函數中的變數。

結論

「nonlocal」提供Python 3 中從封閉作用域存取和修改變數的強大機制。它可以讓您避免在嵌套函數中修改全域變數的陷阱,並保持更有條理和模組化的程式碼結構。

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

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