在Python中,所有的名字都存在壹個空間中,它們在該空間中存在和被操作——這就是命名空間。它就像壹個盒子,每壹個變量名字都對應裝著壹個對象。當查詢變量的時候,會從該盒子裏面找到相應的對象。
定義
名稱到對象的映射。命名空間是壹個字典的實現,鍵為變量名,值是變量對應的值。各個命名空間是獨立沒有關系的,壹個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。
相關推薦:《Python教程》
分類
python程序執行期間會有2個或3個活動的命名空間(函數調用時有3個,函數調用結束後2個)。按照變量定義的位置,可以劃分為以下3類:
Local,局部命名空間,每個函數所擁有的命名空間,記錄了函數中定義的所有變量,包括函數的入參、內部定義的局部變量。
Global,全局命名空間,每個模塊加載執行時創建的,記錄了模塊中定義的變量,包括模塊中定義的函數、類、其他導入的模塊、模塊級的變量與常量。
Built-in,python自帶的內建命名空間,任何模塊均可以訪問,放著內置的函數和異常。
生命周期
Local(局部命名空間)在函數被調用時才被創建,但函數返回結果或拋出異常時被刪除。(每壹個遞歸函數都擁有自己的命名空間)。
Global(全局命名空間)在模塊被加載時創建,通常壹直保留直到python解釋器退出。
Built-in(內建命名空間)在python解釋器啟動時創建,壹直保留直到解釋器退出。
各命名空間創建順序:python解釋器啟動 ->創建內建命名空間 -> 加載模塊 -> 創建全局命名空間 ->函數被調用 ->創建局部命名空間
各命名空間銷毀順序:函數調用結束 -> 銷毀函數對應的局部命名空間 -> python虛擬機(解釋器)退出 ->銷毀全局命名空間 ->銷毀內建命名空間
python解釋器加載階段會創建出內建命名空間、模塊的全局命名空間,局部命名空間是在運行階段函數被調用時動態創建出來的,函數調用結束動態的銷毀的。