Python作為一門動態語言,在程式碼執行時會維護一個常數、變數、函數等命名的環境。這個環境就是命名空間,也可以稱為名稱空間。本文將詳細介紹Python中的命名空間。
- 命名空間概述
Python中的命名空間是一個儲存名稱與物件對應關係的字典(dictionary),其中名稱就是指標識符(identifier),物件就是指一切物件。 Python中的一切都是對象,包括整數、浮點數、字串、函數、類別等。
- 命名空間分類
Python中的命名空間可以分為三種類型:
(1)內建命名空間(Built-in Namespace)
內建命名空間是Python解釋器啟動時就載入了的命名空間。內建命名空間中預設包含了一些函數和變量,如print()、type()、str()等,開發人員可以直接使用。內建命名空間也可以透過 builtins 模組來存取。
(2)全域命名空間(Global Namespace)
全域命名空間是指在模組中定義的變數、函數等,而不是在函數或類別中定義的。在一個模組中定義的全域變數在其他模組中也可以被存取。一個模組只有一個全域命名空間,模組中的所有函數都可以存取這個命名空間。
(3)局部命名空間(Local Namespace)
局部命名空間是在函數呼叫時建立的命名空間,用於儲存函數的局部變數、參數、暫存變數等。函數結束呼叫時,局部命名空間也會被銷毀。
- 命名空間查找規則
當使用變數時,Python會先在局部命名空間中尋找對應的變量,如果沒有找到,就會到全域命名空間中尋找,最後再到內建命名空間中尋找。換句話說,Python查找變數時是按照局部、全域、內建的順序進行的,這種查找變數的順序稱為LEGB規則。
- 命名空間的作用域
在Python中,每個函數、模組、類別都有自己的命名空間。當一個名稱被綁定到一個物件時,它只在該命名空間中有意義。如果名稱被綁定到一個局部命名空間中,它就只在該函數中有意義;如果名稱被綁定到全域命名空間中,它在該模組中就有意義;如果名稱被綁定到內建命名空間中,它就在整個Python解釋器中都有意義。
- 透過globals()和locals()函數取得命名空間
Python中可以使用globals()和locals()兩個函數來取得對應的全域命名空間和局部命名空間。 globals()函數傳回全域命名空間的字典,locals()函數傳回局部命名空間的字典。
- 命名空間的注意點
(1)命名空間中的名稱必須是合法的識別碼。
(2)函數和類別就是建立一個新的命名空間。
(3)變數名稱可以在命名空間中重新綁定到其他物件上。
(4)使用global語句可以讓函數內部的變數引用全域變數。
(5)使用nonlocal語句可以讓函數內部的變數引用外層函數的局部變數。
(6)Python中名稱空間的查找是依照LEGB規則來尋找的。
- 結論
本文詳細介紹了Python中的命名空間,包括命名空間概述、命名空間分類、命名空間查找規則、命名空間的作用域、透過globals()和locals()函數獲取命名空間等方面。對於Python初學者來說,了解命名空間是學習Python語言的重要一步。
以上是Python中的命名空間詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!