首頁 > 後端開發 > Python教學 > Python 的「nonlocal」關鍵字在修改變數時與「global」有何不同?

Python 的「nonlocal」關鍵字在修改變數時與「global」有何不同?

Linda Hamilton
發布: 2024-12-21 04:59:13
原創
1025 人瀏覽過

How Does Python's `nonlocal` Keyword Differ from `global` in Modifying Variables?

理解Python 3 中的「非本地」

與傳統語言不同,Python 允許巢狀函數存取在其外部作用域中定義的變數。但是,存取巢狀函數中未宣告的變數(即非局部變數)可能會導致意外行為。

「非局部」關鍵字

中Python 3 中,「nonlocal」關鍵字可讓您修改巢狀函數內外部作用域中宣告的變數。透過使用“nonlocal”,您可以聲明您正在修改的變數是非本地的,並且屬於外部作用域。

“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 遮蔽了外部函數的變數x,導致值 2被指派給x 在內部函數中。外部函數的變數 x 不受影響。

使用 "nonlocal"

要從內部函數修改外部函數的變數 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」關鍵字允許內部函數存取和修改外部函數的變數 x。結果,外部函數中 x 的值改為 2。

與「global」的比較

與「nonlocal」不同,「global」關鍵字指的是屬於全域範圍的變數。使用「global」會將內部函數中的變數綁定到全域變量,無論是否存在其他同名局部變數:

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
登入後複製

因此,當您想若要修改在外部作用域中宣告的變數時,應使用“nonlocal”,而從全域作用域存取變數時應使用“global”。

以上是Python 的「nonlocal」關鍵字在修改變數時與「global」有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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