1、作用域
如果乙個變數在def內賦值,他被定位在這個函式內
如果乙個變數在乙個巢狀的def中賦值,對於巢狀的函式來說,它非本地的
如果在def之外賦值,他就是整個檔案
2、在互動式模式下,其實是在乙個名為__main__的模板內。
3、乙個函式的內部的任何型別的賦值都會把乙個名稱劃定為本地的。這包括=語句,import中的模板名稱,def中的函式名稱,函式引數名稱等。如果在乙個def中以任意方式賦值的名稱,他都將對於該函式是本地的。
注意:原處改變物件並不會把變數劃分為本地變數。
4、變數名解析:legb原則
1變數名引用分為三個作用域進行查詢:首先是本地,然後是函式內(如果有的話),之後是全域性的,最後是內建的
2預設情況下,變數名賦值會建立或者改變本地變數
3全域性宣告和非本地宣告將賦值的變數名對映到模板檔案的內部作用域。
4當在函式中使用未認證的變數名時,python搜尋4個作用域(本地作用域,之後是上一層次中的def或者lambda的本地作用域,之後是全域性,最後是內建的)並且在第一處能找到這個變數的地方停下來,如果變數名在這個過程中沒有找到則會報錯。
5、內建作用域
內建作用域僅僅是乙個名為builtins內建模板,要在import builtins才能使用
import builtins
print(dir(builtins))
6、全域性變數
全域性變數是位於模板檔案內部的頂層的變數名
全域性變數如果在函式內部被賦值的話,必須經過宣告
全域性變數在函式的內部不經過宣告也可以被引用
7、工廠函式(閉合函式)
乙個能夠記住巢狀作用變數的函式
例如:def maker(n):
def action(x):
return x**n
return action
f = maker(2)
print(f(2)) #輸出9
8、這個例子需要思考:
def f():
a =
for i in range(5):
return a
t = f()
print(t[0](2)) #輸出16
print(t[1](2),t[2](2)) #輸出16,16
解釋:因為for迴圈結束後,i的值是4,記住這個i=4,所以當呼叫時,x的值才被傳進來。
解決辦法是使用預設引數:
def f():
a =
for i in range(5):
return a
t = f()
print(t[0](2)) #輸出0
print(t[1](2),t[2](2)) #輸出2,4
9、nonlocal使用舉例
def tester(start):
state = start
def nested(label):
nonlocal state #如果沒有這個,下面的是state+=1不行的
print(label,state)
state+=1
return nested
python中函式作用域
在python中,乙個函式就是乙個作用域 name xiaoming defchange name name sthu print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的na...
Python中的函式作用域
在python中,乙個函式就是乙個作用域 name xiaoyafei def change name name 肖亞飛 print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的n...
Python 函式作用域
python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...