Python函數(shù)命名空間和作用域(Local與Global)
摘要:
Python函數(shù)是一個(gè)包裝起來的代碼塊,通過前面的返回函數(shù),閉包函數(shù)等課程,我們發(fā)現(xiàn)其內(nèi)部變量定義在不同的位置,使用起來的效果就有所不同,這就是python函數(shù)的作用域和命名空間。
1.Local作用域
a = 100 def func5(): ? ? b = 50 ? ? a = 99 ? ? print('函數(shù)內(nèi)a', a) ? ? print('函數(shù)內(nèi)b', b) print('函數(shù)外a', a) func5() print('函數(shù)外b', b)
返回結(jié)果:
函數(shù)外a 100
函數(shù)內(nèi)a 99
函數(shù)內(nèi)b 50
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/python知識(shí)總結(jié)/2.python自學(xué)網(wǎng)-通用模塊-視頻源碼/test.py", line 12, in <module>
print('函數(shù)外b', b)
NameError: name 'b' is not defined
上面函數(shù)中定義b變量,所以外面無法輸出。
2.Enclosing function locals作用域
a = 100 def func5(): ? ? b = 50 ? ? print('函數(shù)內(nèi)a', a) ? ? print('函數(shù)內(nèi)b', b) ? ? def func6(): ? ? ? ? print('下層函數(shù)內(nèi)a', a) ? ? ? ? print('下層函數(shù)內(nèi)b', b) ? ? func6() func5()
返回結(jié)果:
函數(shù)內(nèi)a 100
函數(shù)內(nèi)b 50
下層函數(shù)內(nèi)a 100
下層函數(shù)內(nèi)b 50
3.Global全局變量
a = 123 def func(): ? ? a = 100 ? ? print(a) print(a) func() print(a) a = 123 def func(): ? ? global a ?# 這里不能使用nonlocal ? ? a = 100 ? ? print(a) ? ? print(locals()) ?# 查看局部變量 ? ? print(globals()) ?# 查看全局變量 print(a) func() print(a)
4.非局部變量nonlocal
def func5(): ? ? b = 50 ? ? print(b) ? ? def func6(): ? ? ? ? nonlocal b ?# 非局部的,只適用于閉包內(nèi)部 ? ? ? ? b = 60 ? ? ? ? print(b) ? ? func6() ? ? print(b) func5()
5.就近原則
b = 1111 def func5(): ? ? b = 50 ? ? print(b) ? ? def func6(): ? ? ? ? b = 60 ? ? ? ? print(b) ?# 這里的b從內(nèi)到外究竟查找 ? ? func6() ? ? print(b) func5() a = 100 def func5(): ? ? b = 50 ? ? print(a) ? ? print(b) ? ? def func6(): ? ? ? ? b = 60 ? ? ? ? print(b) ? ? ? ? print(a) func5()
6.函數(shù)執(zhí)行順序
a = 123 def func1(): ? ? print(a) ? ? print(b) func1() ?# 不能打印b b = 456 func1() ?# 可以打印b
7.循環(huán)、判斷代碼塊中作用域問題
if True: ? ? a = 100 print(a) for i in range(1, 10): ? ? print(i) print(i)
循環(huán)代碼塊中沒有作用域這樣的情況。
到此這篇關(guān)于Python函數(shù)命名空間和作用域(Local與Global)的文章就介紹到這了,更多相關(guān)Python命名空間和作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python讀取json數(shù)據(jù)還原表格批量轉(zhuǎn)換成html
這篇文章主要介紹了python讀取json數(shù)據(jù)還原表格批量轉(zhuǎn)換成html,由于需要對(duì)ocr識(shí)別系統(tǒng)的表格識(shí)別結(jié)果做驗(yàn)證,通過返回的json文件結(jié)果對(duì)比比較麻煩,故需要將json文件里面的識(shí)別結(jié)果還原為表格做驗(yàn)證,下面詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-03-03淺析Python 實(shí)現(xiàn)一個(gè)自動(dòng)化翻譯和替換的工具
這篇文章主要介紹了Python 實(shí)現(xiàn)一個(gè)自動(dòng)化翻譯和替換的工具,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Python利用PyAutoGUI實(shí)現(xiàn)自動(dòng)點(diǎn)贊
PyAutoGUI作為一個(gè) GUI 操作的神器,我們看到了它的操作都很簡(jiǎn)單,非常通俗易懂,基本上看到函數(shù)就能知道它的功效。本文將用它實(shí)現(xiàn)批量給知乎的文章點(diǎn)贊,感興趣的可以了解一下2022-06-06Python restful框架接口開發(fā)實(shí)現(xiàn)
這篇文章主要介紹了Python restful框架接口開發(fā)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件全過程
pyinstaller是一個(gè)支持跨平臺(tái)使用的第三方庫,它可以將腳本執(zhí)行所需的模塊和庫,自動(dòng)分析、收集并生成一個(gè)文件夾或者可執(zhí)行文件,這篇文章主要給大家介紹了關(guān)于conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件的相關(guān)資料,需要的朋友可以參考下2023-12-12pytorch使用voc分割數(shù)據(jù)集訓(xùn)練FCN流程講解
這篇文章主要介紹了pytorch使用voc分割數(shù)據(jù)集訓(xùn)練FCN流程,圖像分割發(fā)展過程也經(jīng)歷了傳統(tǒng)算法到深度學(xué)習(xí)算法的轉(zhuǎn)變,傳統(tǒng)的分割算法包括閾值分割、分水嶺、邊緣檢測(cè)等等2022-12-12詳解python 字符串和日期之間轉(zhuǎn)換 StringAndDate
這篇文章主要介紹了python 字符串和日期之間轉(zhuǎn)換 StringAndDate簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05本地文件上傳到七牛云服務(wù)器示例(七牛云存儲(chǔ))
這篇文章主要介紹了使用PYTHON把本地文件上傳到七牛云服務(wù)的方法,開發(fā)環(huán)境是Python 2.7,大家參考使用吧2014-01-01