先看官方文檔的一段話:A anmespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries.
命名空間(Namespace)是從名稱到對象的映射。各個命名空間是獨立的,沒有任何關系,所以一個命名空間不能有重名,但不同的命名空間是可以重名而沒有任何影響。
我們舉一個計算機系統中搞得例子,一個文件夾(目錄)中可以包含多個文件夾,每個文件夾不能有相同的文件名,但不同文件夾中的文件可以重名。
一般有三種命名空間:
- 內置名稱(built-in names),python語言內置的名稱,比如函數名abs, char和異常名稱BaseException, Exception等等。
- 全局名稱(global names),模塊中定義的名稱,記錄了模塊的變量,包括函數、類、其它導入的模塊、模塊級的變量和常量。
- 局部名稱(local names),函數中定義的名稱,記錄了函數的變量,包括函數的參數和局部定義的變量。(類中定義的也是)
命名空間查找順序:
假設我們要使用變量runoob,則Python的查找順序為:局部的命名空間->全局命名空間->內置命名空間
如果找不到變量runoob,它將放棄查找並引發一個NameError異常:
NameError: name 'runoob' is not defined.
命名空間的生命周期:
命名空間的生命周期取決於對象的作用域,如果對象執行完成,則該命名空間的生命周期就結束。
因此,我們無法從外部命名空間方位內部命名空間的對象。
原文連接:https://www.runoob.com/python3/python3-namespace-scope.html