Python函式作用域的查詢順序

2022-03-07 03:39:54 字數 1543 閱讀 4889

1.什麼是legb?

l:local 函式內部作用域 

e:enclosing 函式內部與內嵌函式之間 

g:global 全域性作用域 

b:build-in 內建作用域

2.它們是作什麼用的

為什麼非要介紹這個呢?或者說它們的作用是什麼? 

原因是因為我們的在學習python函式的時候,經常會遇到很多定義域的問題,全部變數,內部變數,內部嵌入的函式,等等,python是如何查詢的呢?以及python又是按照什麼順序來查詢的呢?這裡做乙個順序的說明

3.順序是什麼

跟名字一樣,python在函式裡面的查詢分為4種,稱之為legb,也正是按照這種順序來查詢的。

首先,是local,先查詢函式內部 

然後,是enclosing,再查詢函式內部與嵌入函式之間(是指在函式內部再次定義乙個函式) 

其次,是global,查詢全域性 

最後,是build-in,內建作用域

4.舉例說明

ex1

1 passline = 6023

deffunc(val):

4if val >=passline:

5print('

pass')

6else:7

print('

failed')

89 func(89)

1011

''''''''''''

12pass

13 [finished in

0.2s]

14''''''''''''

python函式首先查詢local,在區域性變數作用域裡並沒有passline的定義,然後發現函式內部並沒有內嵌函式,這時python開始查詢global,在全域性裡查詢到passline的定義,被呼叫。

ex2

1

defmax(val1, val2):

2return

max(val1, val2)34

print(max(90, 100))56

'''''''''

7100

8[finished in 0.1s]

9'''''''''

max函式裡面直接呼叫另外乙個函式,呼叫的max()(注意兩個函式的大小寫不一樣),該函式並沒有被定義,但是卻屬於我們上述的第四種,屬於build-in函式,既是在python標準庫里的函式,內建的,可以直接呼叫的。最後一步才會查詢到這裡

關於第二種,屬於內嵌函式,即使在函式裡面再次定義乙個函式,這時會首先查詢local函式裡面是否有定義,然後才會查詢函式裡面內嵌函式裡面有沒有定義,這一種有專門的名詞,叫做閉包,閉包將在另外文章裡專門寫到 

Python 函式作用域

python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...

Python 函式的作用域

python中的作用域有4種 名稱介紹 llocal,區域性作用域,函式中定義的變數 eenclosing,巢狀的父級函式的區域性作用域,即包含此函式的上級函式的區域性作用域,但不是全域性的 bgloba,全域性變數,就是模組級別定義的變數 gbuilt in,系統固定模組裡面的變數,比如int,b...

Python中的函式作用域

在python中,乙個函式就是乙個作用域 name xiaoyafei def change name name 肖亞飛 print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的n...