作用域:顧名思義,作用的范圍。
如果你是自學者,而且已經進軍到函數這一部分了,那么就應當了解下Python的作用域。否則你可能會像我一樣,總是對一個變量名同時存在函數內和函數外且有不同值搞的暈頭轉向。
在這里就總結一下,在本人的知識范圍內所了解到的作用域是什么樣的,LEGB規則到底規定了什么。
全局范圍的產生(global):
我們創建一個xxx.py文件,就是一個模塊,這時一個作用域就產生了。這個范圍是整個模塊,稱作Global ,全局范圍。
例如:創建一個文件demo.py。
聲明一個變量,bd="百度"。
變量bd就是個全局變量。
bd="百度" if True: print(bd) #============== def function_1(): print(bd) function_1()
bd在函數內和函數外都能被使用。
本地范圍的產生(Local):
當函數被定義后,一個屬于這個函數的小天地就產生了。可以在內部定義變量,也可以在它的內部嵌套函數。這個范圍就是局部范圍。在局部范圍的變量只能局部范圍內使用。
def locals(): x=100 print("local_x = ",x+20) locals()
輸出:local_x =? 120
如果在全局范圍內打印x就會報錯:
def locals(): x=100 print("local_x = ",x+20 print(x)
提示名字錯誤:x沒有被定義(NameError: name 'x' is not defined)
所以局部變量x僅在函數內使用。在其他地方調用時錯誤的。
嵌套范圍的產生(Enclosed ):
這個范圍在函數嵌套時產生,介于全局和局部范圍之間。
比如一個函數嵌套了另一個函數,這個函數的作用域就是嵌套的范圍,被嵌套的就是本地范圍,如果有更多層的嵌套,那就有多層的嵌套范圍。
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的內建函數:(Built-in)內建函數是天生就有的,你在那個作用域都可以以調用。用的最多的莫過于print()關于內建函數你可以在python的documentation內找到。python的內建函數:(Built-in)內建函數是天生就有的,你在那個作用域都可以以調用。用的最多的莫過于print()關于內建函數你可以在python的documentation內找到。
LEGB規則:
LEGB是Local,Enclosed?,Global,Built-in首字母的縮寫聯合。
它們的范圍是有小到大是這樣排列的,Local----Enclosed----Global----Built-in,而且上層套下層:
2、python腳本運行時找名稱的順序:
1)從它本身所在的層級找名;
2)如果沒有就向外層找;
3)不會向內找,也不會從和它同級的層內找。
3、如果在某個層內找到,就停止尋找,即使外面有同名的。
def max(s): m=min(s) return m numList=[1,2,4,5,7,8,9] maxNun=max(numList) print('最大值=',maxNun)
輸出:最大值= 1
在全局范圍內,調用max()函數,因為有個自定義函數和內建的函數max()同名,所以它調用了,自定義的函數max(),就停止向外層查找。
同一作用域內兩個名稱是獨立的,互不干擾。
比如兩個同一級別的函數內,可以定義同名的變量,或嵌套同名的函數。
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?
結束語以上就是關于,作用域的一些規則。個人認為,盡管作用域是獨立的,但避免寫同名的函數,和變量。可起的名字很多,何必給自己找麻煩。以上就是關于,作用域的一些規則。個人認為,盡管作用域是獨立的,但避免寫同名的函數,和變量。可起的名字很多,何必給自己找麻煩。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
