名稱空間與作用域(1)
阿新 • • 發佈:2020-08-08
一、 什麼是名稱空間?
#名稱空間:存放名字的地方,三種名稱空間,(之前遺留的問題x=1,1存放於記憶體中,那名字x存放在哪裡呢?名稱空間正是存放名字x與1繫結關係的地方)
二、名稱空間的載入順序
python test.py #1、python直譯器先啟動,因而首先載入的是:內建名稱空間 #2、執行test.py檔案,然後以檔案為基礎,載入全域性名稱空間 #3、在執行檔案的過程中如果呼叫函式,則臨時產生區域性名稱空間
三、名字的查詢順序
區域性名稱空間--->全域性名稱空間--->內建名稱空間 #需要注意的是:在全域性無法檢視區域性的,在區域性可以檢視全域性的,如下示例# max=1 def f1(): # max=2 def f2(): # max=3 print(max) f2() f1() print(max)
四、作用域
#1、作用域即範圍 - 全域性範圍(內建名稱空間與全域性名稱空間屬於該範圍):全域性存活,全域性有效 - 區域性範圍(區域性名稱空間屬於該範圍):臨時存活,區域性有效 #2、作用域關係是在函式定義階段就已經固定的,與函式的呼叫位置無關,如下 x=1 def f1(): def f2(): print(x) return重點f2 x=100 def f3(func): x=2 func() x=10000 f3(f1()) #3、檢視作用域:globals(),locals() LEGB 代表名字查詢順序: locals -> enclosing function -> globals -> __builtins__ locals 是函式內的名字空間,包括區域性變數和形參 enclosing 外部巢狀函式的名字空間(閉包中常見) globals 全域性變數,函式定義所在模組的名字空間 builtins 內建模組的名字空間