日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

關于Python作用域自學總結

系統 1783 0

作用域:顧名思義,作用的范圍。

如果你是自學者,而且已經進軍到函數這一部分了,那么就應當了解下Python的作用域。否則你可能會像我一樣,總是對一個變量名同時存在函數內和函數外且有不同值搞的暈頭轉向。

在這里就總結一下,在本人的知識范圍內所了解到的作用域是什么樣的,LEGB規則到底規定了什么。

全局范圍的產生(global):

我們創建一個xxx.py文件,就是一個模塊,這時一個作用域就產生了。這個范圍是整個模塊,稱作Global ,全局范圍。

例如:創建一個文件demo.py。

聲明一個變量,bd="百度"。

變量bd就是個全局變量。

            
bd="百度"

if True:
  print(bd)
#==============
def function_1():
  print(bd)
function_1()
          

bd在函數內和函數外都能被使用。

關于Python作用域自學總結_第1張圖片

本地范圍的產生(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僅在函數內使用。在其他地方調用時錯誤的。

關于Python作用域自學總結_第2張圖片

嵌套范圍的產生(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作用域自學總結_第3張圖片

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)不會向內找,也不會從和它同級的層內找。

關于Python作用域自學總結_第4張圖片

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(),就停止向外層查找。

關于Python作用域自學總結_第5張圖片

同一作用域內兩個名稱是獨立的,互不干擾。

比如兩個同一級別的函數內,可以定義同名的變量,或嵌套同名的函數。

            
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作用域自學總結_第6張圖片

結束語以上就是關于,作用域的一些規則。個人認為,盡管作用域是獨立的,但避免寫同名的函數,和變量。可起的名字很多,何必給自己找麻煩。以上就是關于,作用域的一些規則。個人認為,盡管作用域是獨立的,但避免寫同名的函數,和變量。可起的名字很多,何必給自己找麻煩。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 仙桃市| 常州市| 聂荣县| 合肥市| 双辽市| 林甸县| 赣州市| 阿巴嘎旗| 崇明县| 伊金霍洛旗| 吐鲁番市| 大理市| 新丰县| 新建县| 贺兰县| 巴中市| 辉县市| 文水县| 赫章县| 乾安县| 唐海县| 重庆市| 鄂伦春自治旗| 远安县| 隆子县| 洪洞县| 莆田市| 上思县| 措勤县| 德令哈市| 庆安县| 安阳县| 湛江市| 安徽省| 四平市| 太白县| 封开县| 宁安市| 平果县| 阜宁县| 沁水县|