python命名空間namespace和作用域


Python的變量定義后都有自己的作用域,每個作用域內都有名字空間。注意⚠️,python所有的變量和函數都是先定義,后使用!!

名稱空間就是變量名稱與對象的關聯關系。Python中使用變量名引用對象,需要使用該變量時,就在命名空間中進行搜索,獲取對應的對象。直接訪問一個變量,會在四個namespace中逐一搜索,即:Local(innermost)、Enclosing、Global(next-to-last)、Built-in(outtermost)。

1、Local(innermost):局部變量,函數內部的變量

2、Enclosing:也是局部變量,閉包函數變量。

3、 Global:全局變量,腳本文件無縮進的變量。

4、Built-in(outtermost):Python內置的變量和關鍵詞

python使用的搜索順序是:1-2-3-4 

Local -> Enclosing -> Global -> Built-in

每個函數都有着自已的名稱空間,叫做局部名稱空間

每個局部名稱空間的外部的名稱空間,叫做封閉區域;如內嵌函數的外部函數的局部名稱空間,就是這個內嵌函數的封閉區域。

每個模塊擁有它自已的名稱空間,叫做全局名稱空間

還有就是內置名稱空間,任何模塊均可訪問它,它存放着內置的函數和異常。

python運行機制:

當有一個變量在 local 域中找不到時,Python會找上一層的作用域,即 enclosing 域(該域不一定存在)。
enclosing 域還找不到的時候,再往上一層,搜索模塊內的 global 域。最后,會在 built-in 域中搜索。
對於最終沒有搜索到時,Python會拋出一個 NameError 異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM