一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 詳解Python函數作用域的LEGB順序

詳解Python函數作用域的LEGB順序

2020-08-23 11:55岑宇 Python

這篇文章主要為大家詳細介紹了Python函數作用域的LEGB順序的相關資料,感興趣的朋友可以參考一下

本文為大家介紹了Python函數作用域的查找順序,供大家參考,具體內容如下

1.什么是LEGB?
L:local 函數內部作用域
E:enclosing 函數內部與內嵌函數之間
G:global 全局作用域
B:build-in 內置作用域

2.LEGB是作什么用的?
為什么非要介紹這個呢?或者說它們的作用是什么?
原因是因為我們的在學習Python函數的時候,經常會遇到很多定義域的問題,全部變量,內部變量,內部嵌入的函數,等等,Python是如何查找的呢?以及Python又是按照什么順序來查找的呢?這里做一個順序的說明

3.順序是什么
跟名字一樣,Python在函數里面的查找分為4種,稱之為LEGB,也正是按照這種順序來查找的。

首先,是local,先查找函數內部
然后,是enclosing,再查找函數內部與嵌入函數之間(是指在函數內部再次定義一個函數)
其次,是global,查找全局
最后,是build-in,內置作用域

4.舉例說明
ex1

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
passline = 60
 
def func(val):
  if val >= passline:
    print('pass')
  else:
    print('failed')
 
func(89
 
''''''''''''
pass
[Finished in 0.2s]
''''''''''''

Python函數首先查找local,在局部變量作用域里并沒有passline的定義,然后發現函數內部并沒有內嵌函數,這時Python開始查找global,在全局里查找到passline的定義,被調用。

ex2

?
1
2
3
4
5
6
7
8
9
def Max(val1, val2):
  return max(val1, val2)
 
print(Max(90, 100))
 
'''''''''
100
[Finished in 0.1s]
'''''''''

Max函數里面直接調用另外一個函數,調用的max()(注意兩個函數的大小寫不一樣),該函數并沒有被定義,但是卻屬于我們上述的第四種,屬于build-in函數,既是在python標準庫里的函數,內置的,可以直接調用的。最后一步才會查找到這里

關于第二種,屬于內嵌函數,即使在函數里面再次定義一個函數,這時會首先查找local函數里面是否有定義,然后才會查找函數里面內嵌函數里面有沒有定義,這一種有專門的名詞,叫做閉包,閉包在之前一些文章中都有介紹,希望大家閱讀。

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 桥本有菜在线四虎福利网 | 国产人人草 | 色综合合久久天天综合绕视看 | 四虎在线精品免费高清在线 | 国产成人精品一区二区仙踪林 | 日本精品中文字幕在线播放 | 女同志 videos| 操大肥b | 国产区久久 | 国产成人无精品久久久 | 99视频都是精品热在线播放 | 免费看一级 | 无码中文字幕av免费放 | 国产91亚洲精品 | 毛片免费毛片一级jjj毛片 | 毛片大全免费看 | 国产区1| 免费一级夫妻a | 暴露狂婷婷 | 91视频国产自拍 | 国产成人精品免费久久久久 | 亚洲毛片网 | 天堂avav| 91精品啪在线观看国产线免费 | 国产精品久久久久这里只有精品 | 98在线视频噜噜噜国产 | 青青成人福利国产在线视频 | 亚洲视频免费在线观看 | 肥胖女人一级毛片 | 国产精品欧美在线观看 | 国产一级片在线 | 久久精品亚洲热综合一本 | 网友自拍偷拍 | 香蕉久久网 | 精品国产影院 | 国产精品久久久久毛片 | 白丝女仆被啪到深夜漫画 | 日本一区二区三区国产 | 96日本xxxxxxxxx70| 欧美极品brazzers 高清 | 午夜伦理yy44008影院 |