python?nonlocal的用法詳解
官網(wǎng)的nonlocal的用法
1,非局部聲明變量指代的已有標識符是最近外面函數(shù)的已聲明變量,但是不包括全局變量。這個是很重要的,因為綁定的默認行為是首先搜索本地命名空間。nonlocal聲明的變量只對局部起作用,離開封裝函數(shù),那么該變量就無效。
2,非局部聲明不像全局聲明,我們必須在封裝函數(shù)前面事先聲明該變量
3,非局部聲明不能與局部范圍的聲明沖突
第一點:
count = 1 # 這里是聲明的是全局變量,對于nonlocal來說全局變量是不包括的 def a(): count = 'a函數(shù)里面' # 這里對于nonlocal來說就是外面的函數(shù)已聲明的變量 def b(): nonlocal count # nonlocal count指的是函數(shù)b內(nèi) print(count) count = 2 b() print(count) if __name__ == '__main__': a() print(count)
count = 1 def a(): # count = 'a函數(shù)里面' # SyntaxError: no binding for nonlocal 'count' found def b(): nonlocal count print(count) count = 2 b() print(count) if __name__ == '__main__': a() print(count)
像上面的代碼,如果nonlocal執(zhí)行前,沒有在局部里先聲明局部變量,就會報錯找不到局部變量,因為nonlocal是不會查全局變量。
nonlocal的作用:
1,nonlocal可以讓最里面的函數(shù)使用最近的一個外函數(shù)已聲明的變量,將最里面的函數(shù)的局部變量設(shè)置和最近的一個外函數(shù)聲明的變量為同一個變量(引用同一個內(nèi)存地址)。例如下面的代碼,c函數(shù)聲明了nonlocal count,那么c函數(shù)就可以用最近函數(shù)b聲明的count=2,并且可以對b.count賦值。(注意:nonlocal不會使用全局變量)
count = 1 def a(): count = 'a函數(shù)里面' def b(): count = 2 print(count) def c(): nonlocal count print(count) c() b() print(count) if __name__ == '__main__': a() print(count)
2
2
a函數(shù)里面
1
案例:引用官網(wǎng)的例子對global,nonlocal,全局變量的關(guān)系解釋
def scope_test(): def do_local(): spam = "local spam" def do_nonlocal(): nonlocal spam spam = "nonlocal spam" def do_global(): global spam spam = "global spam" spam = "test spam" do_local() print("After local assignment:", spam) do_nonlocal() print("After nonlocal assignment:", spam) do_global() print("After global assignment:", spam) scope_test() print("In global scope:", spam)
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
上面案例代碼看出:
1,do_local函數(shù)下定義的局部變量spam不會改變scope_test函數(shù)定義的局部變量spam。
2,do_nonlocal函數(shù)下nonlocal非本地聲明,將do_nonlocal函數(shù)下的局部變量spam聲明為非do_nonlocal函數(shù)本地,而是將do_nonlocal.spam聲明和scope_test.spam為同一個變量。
3,do_global函數(shù)下global全局聲明spam為全局變量,但是依然不會改變scope_test.spam的局部變量,說明global全局聲明對局部的變量不產(chǎn)生作用。
4,在全局引用全局聲明global的全局變量spam是可以的。
總結(jié)
到此這篇關(guān)于python nonlocal用法詳解的文章就介紹到這了,更多相關(guān)python nonlocal用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用當前時間、隨機數(shù)產(chǎn)生一個唯一數(shù)字的方法
這篇文章主要介紹了Python使用當前時間、隨機數(shù)產(chǎn)生一個唯一數(shù)字的方法,涉及Python時間與隨機數(shù)相關(guān)操作技巧,需要的朋友可以參考下2017-09-09利用Python實現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換方法
JSON(JavaScript Object Nonation)是利用鍵值對+嵌套來表示數(shù)據(jù)的一種格式,以其輕量、易解析的優(yōu)點,這篇文章主要介紹了利用Python實現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換,需要的朋友可以參考下2019-07-07Python獲取excel的數(shù)據(jù)并繪制箱型圖和直方圖的方法實例
這篇文章主要給大家介紹了關(guān)于Python獲取excel的數(shù)據(jù)并繪制箱型圖和直方圖的相關(guān)資料,好的圖表能幫助我們深化數(shù)據(jù)的記憶點,文中通過圖文以及代碼示例將實現(xiàn)的方法介紹的非常詳細,需要的朋友可以參考下2023-12-12基于Python編寫PDF轉(zhuǎn)EPUB以及MOBI工具
當我們需要在電子閱讀器上閱讀這些文檔時,轉(zhuǎn)換為EPUB或MOBI格式會提供更好的閱讀體驗,所以本文將使用Python編寫一個PDF轉(zhuǎn)EPUB以及MOBI工具,需要的可以參考下2025-03-03Python生態(tài)圈圖像格式轉(zhuǎn)換問題(推薦)
在Python生態(tài)圈里,最常用的圖像庫是PIL——盡管已經(jīng)被后來的pillow取代,但因為pillow的API幾乎完全繼承了PIL,所以大家還是約定俗成地稱其為PIL。這篇文章主要介紹了Python生態(tài)圈圖像格式轉(zhuǎn)換問題,需要的朋友可以參考下2019-12-12