函式進階之名稱空間
阿新 • • 發佈:2018-11-16
名稱空間是名稱到物件的對映。名稱空間是一個字典的實現,鍵為變數名,值是變數對應的值。各個名稱空間是獨立沒有關係的,一個名稱空間中不能有重名,但是不同的名稱空間可以重名而沒有任何影響。
x = 1
在記憶體中是{x:4304947712} x對應的是1的記憶體地址
名稱空間分三種
locals: 是函式內的名稱空間,包括區域性變數和形參。
globals: 全域性變數,函式定義所在模組的名字空間,也就是打印出這個程式的所有變數。
builtins: 內建模組的名字空間
不同變數的作用域不同就是由這個變數所在的名稱空間決定的。作用域即範圍
全域性範圍:全域性存活,全域性有效。
區域性範圍: 臨時存活,區域性有效。
檢視作用域方法 globals(),locals()
作用域的查詢順序
LEGB
L:locals
E: enclosing 相鄰的上級
G: globals
B: builtins
例子
n = 10 def func(): n = 20 print('func', n) def func2(): n = 30 print('func2', n) def func3(): print('func3:', n) func3() func2() func() # func 20 # func2 30 # func3: 30