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

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

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

theme: smartblue

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

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

下面就開(kāi)始正式的解刨:

變量作用域

先來(lái)理解Python的作用域規(guī)則。這個(gè)很簡(jiǎn)單我們直接讀取官方文檔的說(shuō)明吧:

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

其他廢話(huà)也就不多說(shuō)了,如果想更加了解的話(huà)可移步到官方文檔:python語(yǔ)言參考手冊(cè)

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

global關(guān)鍵字

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

看這個(gè)典型問(wèn)題:

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

運(yùn)行結(jié)果:

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

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

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

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

nonlocal關(guān)鍵字

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

看個(gè)例子:

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

運(yùn)行結(jié)果:

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

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

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

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

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

兩者區(qū)別與選擇

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

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

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

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

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

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

相關(guān)文章

最新評(píng)論

平顶山市| 东乡| 浦江县| 泗阳县| 同德县| 肇州县| 寻乌县| 澄城县| 白河县| 阿鲁科尔沁旗| 松原市| 明溪县| 丽水市| 普格县| 松滋市| 基隆市| 彰武县| 五家渠市| 都昌县| 连云港市| 甘南县| 韩城市| 无为县| 科尔| 广水市| 葫芦岛市| 靖宇县| 大邑县| 西乌珠穆沁旗| 沧源| 岳阳市| 蕲春县| 思茅市| 韶山市| 阳原县| 凤翔县| 通榆县| 仙游县| 石屏县| 石嘴山市| 定远县|