最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解Python中的global與nonlocal關(guān)鍵字

 更新時間:2026年04月15日 09:20:12   作者:HappyAcmen  
本文主要解釋了Python中g(shù)lobal和nonlocal關(guān)鍵字的作用和用法,global關(guān)鍵字用于修改全局變量,但要謹防破壞封裝性;nonlocal關(guān)鍵字用于修改外部嵌套函數(shù)中的變量,適用于閉包和裝飾器場景,兩者各有使用場景,使用時需注意變量作用域和定義情況

theme: smartblue

在使用Python函數(shù)時,有些人會對變量作用域感到困惑。特別是在函數(shù)內(nèi)部想要修改外部變量時,常常會遇到各種報錯。為什么報錯就不得而知了。

所以呢咱們的python語言也是很聰明的引進了global和nonlocal這兩個關(guān)鍵字就派上用場了。它們就像是變量世界的“通行證”,允許你在不同的作用域中操作變量。解決了咱們對修改變量時的難處。這次就深刨一下下這兩個關(guān)鍵字。

下面就開始正式的解刨:

變量作用域

先來理解Python的作用域規(guī)則。這個很簡單我們直接讀取官方文檔的說明吧:

上面這兩幅官網(wǎng)文檔截圖已經(jīng)完全告訴我們了global和nonlocal的作用域規(guī)則:

其他廢話也就不多說了,如果想更加了解的話可移步到官方文檔:python語言參考手冊

接下來主要看它們的用法與區(qū)別:

global關(guān)鍵字

當(dāng)需要在函數(shù)內(nèi)部修改全局變量時,就需要使用global關(guān)鍵字。它相當(dāng)于拿到了修改整個環(huán)境的許可。

看這個典型問題:

x = 10  # 全局變量
def modify():
    x = 20  # 這實際上創(chuàng)建了一個新的局部變量
    print("函數(shù)內(nèi)x:", x)
modify()
print("全局x:", x)  # 輸出還是10,沒被修改

運行結(jié)果:

很明顯,函數(shù)內(nèi)部的賦值操作并沒有改變?nèi)肿兞縳的值,而是創(chuàng)建了一個新的局部變量。這時候如果用上global的話呢,我們看看:

x = 10
def modify():
    global x  # 聲明我們要使用全局變量x
    x = 20    # 現(xiàn)在修改的是全局變量
modify()
print(f"全局x被修改為:{x}", )

這時候我們就知道了:哦!當(dāng)你需要在多個函數(shù)中共享和修改同一個變量時,就得用到global了。比如配置項的全局管理、程序運行狀態(tài)的跟蹤等。

但是global雖然方便,所有東西都不能過度使用的。不然有可能破壞函數(shù)的封裝性。

nonlocal關(guān)鍵字

nonlocal用于嵌套函數(shù)的情況,它允許內(nèi)部函數(shù)修改外部嵌套函數(shù)中的變量 (但不是全局變量)。

看個例子:

def outer():
    x = 10
    def inner():
        x = 20  # 這創(chuàng)建了一個新的inner局部變量
        print(f"inner中的x:{x}", )
    inner()
    print(f"outer中的x:{x}", )  
outer()

運行結(jié)果:

inner函數(shù)并沒能修改outer函數(shù)的變量x。那怎么能把它改了呢?這時候就需要nonlocal:

def outer():
    x = 10
    def inner():
        """ 聲明使用外部嵌套函數(shù)的x"""
        nonlocal x
        x = 20  # 這創(chuàng)建了一個新的inner局部變量
        print(f"inner中的x:{x}", )
    inner()
    print(f"outer中的x:{x}", )
outer()

運行結(jié)果已經(jīng)修改:

使用場景:nonlocal在閉包和裝飾器中特別有用。當(dāng)你需要在一個內(nèi)部函數(shù)中記錄外部函數(shù)的狀態(tài)時,nonlocal提供了一種簡潔的方式。

注意事項:nonlocal只能用于嵌套函數(shù)中,且變量必須在外部函數(shù)中已定義。它不能用于全局變量

兩者區(qū)別與選擇

  • global用于修改全局變量(模塊級別)
  • nonlocal用于修改嵌套函數(shù)中的變量(閉包情況)
  • 兩者都不需要先賦值再使用,只需要聲明即可

選擇使用哪個的關(guān)鍵是看你要修改的變量在哪個作用域:

  • 如果是模塊最外層的變量,用global
  • 如果是外部函數(shù)的變量,用nonlocal

很多時候,使用返回值或?qū)ο髮傩员戎苯有薷耐獠孔兞扛?;Python查找變量的順序是:局部→外部嵌套→全局→內(nèi)置,
如果聲明了global或nonlocal但外部沒有對應(yīng)變量,會引發(fā)錯誤。

好了,關(guān)于global與nonlocal的內(nèi)容就分享這么多,想更更深層去理解的話就去官網(wǎng)文檔看看吧。

到此這篇關(guān)于理解Python中的global與nonlocal關(guān)鍵字的文章就介紹到這了,更多相關(guān)Python global與nonlocal內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

内乡县| 东丰县| 白城市| 天长市| 廊坊市| 开平市| 元氏县| 客服| 桂平市| 阳江市| 滁州市| 长岭县| 涡阳县| 洮南市| 龙州县| 昌都县| 正阳县| 交城县| 潍坊市| 龙里县| 邯郸市| 张家口市| 保德县| 驻马店市| 富顺县| 山东省| 安溪县| 肥乡县| 梁平县| 南平市| 宜都市| 五台县| 岚皋县| 西平县| 正镶白旗| 巨鹿县| 广安市| 嵊泗县| 连平县| 靖州| 阳东县|