詳解Python函數(shù)作用域的LEGB順序
本文為大家介紹了Python函數(shù)作用域的查找順序,供大家參考,具體內(nèi)容如下
1.什么是LEGB?
L:local 函數(shù)內(nèi)部作用域
E:enclosing 函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間
G:global 全局作用域
B:build-in 內(nèi)置作用域
2.LEGB是作什么用的?
為什么非要介紹這個呢?或者說它們的作用是什么?
原因是因為我們的在學(xué)習(xí)Python函數(shù)的時候,經(jīng)常會遇到很多定義域的問題,全部變量,內(nèi)部變量,內(nèi)部嵌入的函數(shù),等等,Python是如何查找的呢?以及Python又是按照什么順序來查找的呢?這里做一個順序的說明
3.順序是什么
跟名字一樣,Python在函數(shù)里面的查找分為4種,稱之為LEGB,也正是按照這種順序來查找的。
首先,是local,先查找函數(shù)內(nèi)部
然后,是enclosing,再查找函數(shù)內(nèi)部與嵌入函數(shù)之間(是指在函數(shù)內(nèi)部再次定義一個函數(shù))
其次,是global,查找全局
最后,是build-in,內(nèi)置作用域
4.舉例說明
ex1
passline = 60
def func(val):
if val >= passline:
print('pass')
else:
print('failed')
func(89)
''''''''''''
pass
[Finished in 0.2s]
''''''''''''
Python函數(shù)首先查找local,在局部變量作用域里并沒有passline的定義,然后發(fā)現(xiàn)函數(shù)內(nèi)部并沒有內(nèi)嵌函數(shù),這時Python開始查找global,在全局里查找到passline的定義,被調(diào)用。
ex2
def Max(val1, val2): return max(val1, val2) print(Max(90, 100)) ''''''''' 100 [Finished in 0.1s] '''''''''
Max函數(shù)里面直接調(diào)用另外一個函數(shù),調(diào)用的max()(注意兩個函數(shù)的大小寫不一樣),該函數(shù)并沒有被定義,但是卻屬于我們上述的第四種,屬于build-in函數(shù),既是在python標(biāo)準(zhǔn)庫里的函數(shù),內(nèi)置的,可以直接調(diào)用的。最后一步才會查找到這里
關(guān)于第二種,屬于內(nèi)嵌函數(shù),即使在函數(shù)里面再次定義一個函數(shù),這時會首先查找local函數(shù)里面是否有定義,然后才會查找函數(shù)里面內(nèi)嵌函數(shù)里面有沒有定義,這一種有專門的名詞,叫做閉包,閉包在之前一些文章中都有介紹,希望大家閱讀。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
python+mysql實現(xiàn)學(xué)生信息查詢系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python+mysql實現(xiàn)學(xué)生信息查詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
python如何使用requests提交post請求并上傳文件(multipart/form-data)
這篇文章主要給大家介紹了關(guān)于python如何使用requests提交post請求并上傳文件(multipart/form-data)的相關(guān)資料,Python有許多庫支持,它們可以簡化HTTP上的數(shù)據(jù)傳輸,requests庫是最受歡迎的Python包之一,因為它在網(wǎng)絡(luò)刮削中被大量使用,需要的朋友可以參考下2023-11-11
使用Python實現(xiàn)圖像標(biāo)記點的坐標(biāo)輸出功能
這篇文章主要介紹了使用Python實現(xiàn)圖像標(biāo)記點的坐標(biāo)輸出功能,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2019-08-08
python代碼實現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python代碼實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Django中常用的查詢數(shù)據(jù)方法及查詢對象的條件詳解
在web 開發(fā)過程中,Django 與后臺數(shù)據(jù)庫的交互是必不可少的一項,也是實現(xiàn)業(yè)務(wù)邏輯所需數(shù)據(jù)的重要方式,這篇文章主要給大家介紹了關(guān)于Django中常用的查詢數(shù)據(jù)方法及查詢對象條件的相關(guān)資料,需要的朋友可以參考下2021-09-09

