Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析
python引用變量的順序: 當(dāng)前作用域局部變量->外層作用域變量->當(dāng)前模塊中的全局變量->python內(nèi)置變量
1.nonlocal
nonlocal關(guān)鍵字用來在函數(shù)或其他作用域中使用外層(非全局)變量。
首先:要明確 nonlocal
關(guān)鍵字是定義在閉包里面的。
請看以下代碼:
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ù)里面都有效。
2.global
global
關(guān)鍵字用來在函數(shù)或其他局部作用域中使用全局變量。但是如果不修改全局變量也可以不使用global
關(guān)鍵字。
還是一樣,看一個(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
是對整個(gè)環(huán)境下的變量起作用,而不是對函數(shù)類的變量起作用。
到此這篇關(guān)于Python nonlocal關(guān)鍵字 與 global 關(guān)鍵字解析的文章就介紹到這了,更多相關(guān)nonlocal 與 global 關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django imgareaselect手動(dòng)剪切頭像實(shí)現(xiàn)方法
這篇文章主要介紹了Django imgareaselect手動(dòng)剪切頭像實(shí)現(xiàn)方法,實(shí)例分析了Django框架操作圖片的相關(guān)技巧,需要的朋友可以參考下2015-05-05Python自動(dòng)安裝第三方庫的小技巧(pip使用詳解)
很多朋友私信小編Python安裝第三方庫安裝技巧,在這就不一一回復(fù)大家了,今天小編給大家分享一篇教程關(guān)于Python自動(dòng)安裝第三方庫的小技巧,本文以安裝plotly為例給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧2021-05-05利用For循環(huán)遍歷Python字典的三種方法實(shí)例
字典由多個(gè)鍵和其對應(yīng)的值構(gòu)成的鍵—值對組成,鍵和值中間以冒號(hào):隔開,項(xiàng)之間用逗號(hào)隔開,整個(gè)字典是由大括號(hào){}括起來的,下面這篇文章主要給大家介紹了關(guān)于如何利用For循環(huán)遍歷Python字典的三種方法,需要的朋友可以參考下2022-03-03將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行
Docker是一個(gè)開源項(xiàng)目,為開發(fā)人員和系統(tǒng)管理員提供了一個(gè)開放平臺(tái),可以將應(yīng)用程序構(gòu)建、打包為一個(gè)輕量級容器,并在任何地方運(yùn)行,這篇文章主要給大家介紹了關(guān)于將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行的相關(guān)資料,需要的朋友可以參考下2023-12-12Python實(shí)現(xiàn)提取或替換PPT中文本與圖片的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)提取保存ppt中的圖片和替換ppt模板的文本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01anaconda?部署Jupyter?Notebook服務(wù)器過程詳解
這篇文章主要為大家介紹了anaconda?部署Jupyter?Notebook服務(wù)器過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案
這篇文章主要給大家分享了Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案,運(yùn)用 while True: + sleep()、Timeloop 庫、threading.Timer 、內(nèi)置模塊 sched ,下面就來看看具體的實(shí)現(xiàn)過程吧2021-12-12