這篇文章主要為大家展示了“Python作用域的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python作用域的示例分析”這篇文章吧。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!專注中小微企業(yè)官網(wǎng)定制,網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。作用域:顧名思義,作用的范圍。
如果你是自學(xué)者,而且已經(jīng)進(jìn)軍到函數(shù)這一部分了,那么就應(yīng)當(dāng)了解下Python的作用域。否則你可能會(huì)像我一樣,總是對一個(gè)變量名同時(shí)存在函數(shù)內(nèi)和函數(shù)外且有不同值搞的暈頭轉(zhuǎn)向。
在這里就總結(jié)一下,在本人的知識范圍內(nèi)所了解到的作用域是什么樣的,LEGB規(guī)則到底規(guī)定了什么。
全局范圍的產(chǎn)生(global):
我們創(chuàng)建一個(gè)xxx.py文件,就是一個(gè)模塊,這時(shí)一個(gè)作用域就產(chǎn)生了。這個(gè)范圍是整個(gè)模塊,稱作Global ,全局范圍。
例如:創(chuàng)建一個(gè)文件demo.py。
聲明一個(gè)變量,bd="百度"。
變量bd就是個(gè)全局變量。
bd="百度" if True: print(bd) #============== def function_1(): print(bd) function_1()
bd在函數(shù)內(nèi)和函數(shù)外都能被使用。
本地范圍的產(chǎn)生(Local):
當(dāng)函數(shù)被定義后,一個(gè)屬于這個(gè)函數(shù)的小天地就產(chǎn)生了??梢栽趦?nèi)部定義變量,也可以在它的內(nèi)部嵌套函數(shù)。這個(gè)范圍就是局部范圍。在局部范圍的變量只能局部范圍內(nèi)使用。
def locals(): x=100 print("local_x = ",x+20) locals()
輸出:local_x = 120
如果在全局范圍內(nèi)打印x就會(huì)報(bào)錯(cuò):
def locals(): x=100 print("local_x = ",x+20 print(x)
提示名字錯(cuò)誤:x沒有被定義(NameError: name 'x' is not defined)
所以局部變量x僅在函數(shù)內(nèi)使用。在其他地方調(diào)用時(shí)錯(cuò)誤的。
嵌套范圍的產(chǎn)生(Enclosed ):
這個(gè)范圍在函數(shù)嵌套時(shí)產(chǎn)生,介于全局和局部范圍之間。
比如一個(gè)函數(shù)嵌套了另一個(gè)函數(shù),這個(gè)函數(shù)的作用域就是嵌套的范圍,被嵌套的就是本地范圍,如果有更多層的嵌套,那就有多層的嵌套范圍。
x=20 def local_out(): y=30 def local_in(): z=40 print('本地變量z:',z) print('嵌套變量y:',y) local_in() print("全局變量x:",x) local_out()
輸出:
全局變量x: 20
嵌套變量y: 30
本地變量z: 40
python的內(nèi)建函數(shù):(Built-in)內(nèi)建函數(shù)是天生就有的,你在那個(gè)作用域都可以以調(diào)用。用的最多的莫過于print()關(guān)于內(nèi)建函數(shù)你可以在python的documentation內(nèi)找到。python的內(nèi)建函數(shù):(Built-in)內(nèi)建函數(shù)是天生就有的,你在那個(gè)作用域都可以以調(diào)用。用的最多的莫過于print()關(guān)于內(nèi)建函數(shù)你可以在python的documentation內(nèi)找到。
LEGB規(guī)則:
LEGB是Local,Enclosed ,Global,Built-in首字母的縮寫聯(lián)合。
它們的范圍是有小到大是這樣排列的,Local----Enclosed----Global----Built-in,而且上層套下層:
2、python腳本運(yùn)行時(shí)找名稱的順序:
1)從它本身所在的層級找名;
2)如果沒有就向外層找;
3)不會(huì)向內(nèi)找,也不會(huì)從和它同級的層內(nèi)找。
3、如果在某個(gè)層內(nèi)找到,就停止尋找,即使外面有同名的。
def max(s): m=min(s) return m numList=[1,2,4,5,7,8,9] maxNun=max(numList) print('大值=',maxNun)
輸出:大值= 1
在全局范圍內(nèi),調(diào)用max()函數(shù),因?yàn)橛袀€(gè)自定義函數(shù)和內(nèi)建的函數(shù)max()同名,所以它調(diào)用了,自定義的函數(shù)max(),就停止向外層查找。
同一作用域內(nèi)兩個(gè)名稱是獨(dú)立的,互不干擾。
比如兩個(gè)同一級別的函數(shù)內(nèi),可以定義同名的變量,或嵌套同名的函數(shù)。
a=3 def add_1(): a=30 print('add_1的 a =',a) def add_2(): a = 3000 print('add_2的 a =', a) add_1() add_2() print('全局變量的 a =', a)
輸出:
add_1的 a = 30
add_2的 a = 3000
全局變量的 a = 3
以上是“Python作用域的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!