Python中關(guān)鍵字nonlocal和global的聲明與解析
一、Python中g(shù)lobal與nonlocal 聲明
如下代碼
a = 10 def foo(): a = 100
執(zhí)行foo() 結(jié)果 a 還是10
函數(shù)中對(duì)變量的賦值,變量始終綁定到該函數(shù)的局部命名空間,使用global 語(yǔ)句可以改變這種行為。
>>> a 10 >>> def foo(): ... global a ... a = 100 ... >>> a 10 >>> foo() >>> a 100
解析名稱(chēng)時(shí)首先檢查局部作用域,然后由內(nèi)而外一層層檢查外部嵌套函數(shù)定義的作用域,如找不到搜索全局命令空間和內(nèi)置命名空間。
盡管可以層層向外(上)查找變量,但是! ..python2 只支持最里層作用域(局部變量)和全局命令空間(gloabl),也就是說(shuō)內(nèi)部函數(shù)不能給定義在外部函數(shù)中的局部變量重新賦值,比如下面代碼是不起作用的
def countdown(start): n = start def decrement(): n -= 1
python2 中,解決方法可以是是把修改值放到列表或字典中,python3 中,可以使用nonlocal 聲明完成修改
def countdown(start): n = start def decrement(): nonlocal n n -= 1
二、Python nonlocal 與 global 關(guān)鍵字解析
nonlocal
首先,要明確 nonlocal 關(guān)鍵字是定義在閉包里面的。請(qǐng)看以下代碼:
x = 0
def outer():
x = 1
def inner():
x = 2
print("inner:", x)
inner()
print("outer:", x)
outer()
print("global:", x)
結(jié)果
# inner: 2 # outer: 1 # global: 0
現(xiàn)在,在閉包里面加入nonlocal關(guān)鍵字進(jìn)行聲明:
x = 0
def outer():
x = 1
def inner():
nonlocal x
x = 2
print("inner:", x)
inner()
print("outer:", x)
outer()
print("global:", x)
結(jié)果
# inner: 2 # outer: 2 # global: 0
看到區(qū)別了么?這是一個(gè)函數(shù)里面再嵌套了一個(gè)函數(shù)。當(dāng)使用 nonlocal 時(shí),就聲明了該變量不只在嵌套函數(shù)inner()里面
才有效, 而是在整個(gè)大函數(shù)里面都有效。
global
還是一樣,看一個(gè)例子:
x = 0
def outer():
x = 1
def inner():
global x
x = 2
print("inner:", x)
inner()
print("outer:", x)
outer()
print("global:", x)
結(jié)果
# inner: 2 # outer: 1 # global: 2
global 是對(duì)整個(gè)環(huán)境下的變量起作用,而不是對(duì)函數(shù)類(lèi)的變量起作用。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Python中的global和nonlocal關(guān)鍵字的使用場(chǎng)景分析
- Python中的global與nonlocal關(guān)鍵字詳解
- 淺析Python中g(shù)lobal和nonlocal關(guān)鍵字的妙用
- Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析
- Python關(guān)鍵字之global與nonlocal
- 簡(jiǎn)單了解python關(guān)鍵字global nonlocal區(qū)別
- python global和nonlocal用法解析
- Python中關(guān)鍵字global和nonlocal的區(qū)別詳解
- python中g(shù)lobal與nonlocal比較
- Python中nonlocal和global的區(qū)別及閉包使用
相關(guān)文章
python3設(shè)計(jì)模式之簡(jiǎn)單工廠模式
這篇文章主要為大家詳細(xì)介紹了python3設(shè)計(jì)模式之簡(jiǎn)單工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
OneFlow源碼解析之Eager模式下Tensor存儲(chǔ)管理
這篇文章主要為大家介紹了OneFlow源碼解析之Eager模式下Tensor的存儲(chǔ)管理實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
python實(shí)現(xiàn)逆波蘭計(jì)算表達(dá)式實(shí)例詳解
這篇文章主要介紹了python實(shí)現(xiàn)逆波蘭計(jì)算表達(dá)式的方法,較為詳細(xì)的分析了逆波蘭表達(dá)式的概念及實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05
Python實(shí)現(xiàn)模擬瀏覽器請(qǐng)求及會(huì)話(huà)保持操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)模擬瀏覽器請(qǐng)求及會(huì)話(huà)保持操作,結(jié)合實(shí)例形式分析了Python基于urllib與urllib2模塊模擬瀏覽器請(qǐng)求及cookie保存會(huì)話(huà)相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
Python 實(shí)現(xiàn)Numpy中找出array中最大值所對(duì)應(yīng)的行和列
今天小編就為大家分享一篇Python 實(shí)現(xiàn)Numpy中找出array中最大值所對(duì)應(yīng)的行和列,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
在Python中通過(guò)機(jī)器學(xué)習(xí)實(shí)現(xiàn)人體姿勢(shì)估計(jì)
姿態(tài)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)活躍研究領(lǐng)域。這篇文章將為大家介紹在Python中如何利用機(jī)器學(xué)習(xí)進(jìn)行人體姿勢(shì)估計(jì),感興趣的小伙伴可以了解一下2021-12-12

