Python--作用域
阿新 • • 發佈:2018-11-28
作用域
作用範圍: 全域性範圍(內建名稱空間與全域性名稱空間屬於該範圍):全域性有效 區域性範圍(區域性名稱空間屬於該範圍):區域性有效
注:作用域關係是在函式定義階段就已經固定的,與函式的呼叫位置無關
檢視作用域
LEGB 代表名字查詢順序: locals -> enclosing function -> globals -> __builtins__ locals 是函式內的名字空間,包括區域性變數和形參 enclosing 外部巢狀函式的名字空間(閉包中常見) globals 全域性變數,函式定義所在模組的名字空間 builtins 內建模組的名字空間
global & nonlocal
x = 1 def foo(): global x x = 3 print(x) foo() print(x) # global關鍵字用於在區域性修改全域性的變數 x = 1 def f1(): x =0 print(x) # 0 def f2(): x = 2 print(x) # 2 def f3(): nonlocal x x = 666 print(x) # 666 f3() print(x) # 666 f2() f1() print(x) # 1 # nonlocal關鍵字用於修改上一層的變數,但是不會修改全域性的,如果區域性沒有找到就會報錯