Python的命名空間是Python程序猿必須了解的內(nèi)容,對(duì)Python命名空間的學(xué)習(xí),將使我們?cè)诒举|(zhì)上掌握一些Python中的瑣碎的規(guī)則。
接下來我將分四部分揭示Python命名空間的本質(zhì):一、命名空間的定義;二、命名空間的查找順序;三、命名空間的生命周期;四、通過locals()和globals()BIF訪問命名空間
重點(diǎn)是第四部分,我們將在此部分觀察命名空間的內(nèi)容。
一、命名空間
Python使用叫做命名空間的東西來記錄變量的軌跡。命名空間是一個(gè)字典(dictionary),它的鍵就是變量名,它的值就是那些變量的值。
Anamespaceisamappingfromnamestoobjects.MostnamespacesarecurrentlyimplementedasPythondictionaries。
在一個(gè)Python程序中的任何一個(gè)地方,都存在幾個(gè)可用的命名空間。
1、每個(gè)函數(shù)都有著自已的命名空間,叫做局部命名空間,它記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量。
2、每個(gè)模塊擁有它自已的命名空間,叫做全局命名空間,它記錄了模塊的變量,包括函數(shù)、類、其它導(dǎo)入的模塊、模塊級(jí)的變量和常量。
3、還有就是內(nèi)置命名空間,任何模塊均可訪問它,它存放著內(nèi)置的函數(shù)和異常。
二、命名空間查找順序
當(dāng)一行代碼要使用變量x的值時(shí),Python會(huì)到所有可用的名字空間去查找變量,按照如下順序:
1、局部命名空間:特指當(dāng)前函數(shù)或類的方法。如果函數(shù)定義了一個(gè)局部變量x,或一個(gè)參數(shù)x,Python將使用它,然后停止搜索。
2、全局命名空間:特指當(dāng)前的模塊。如果模塊定義了一個(gè)名為x的變量,函數(shù)或類,Python將使用它然后停止搜索。
3、內(nèi)置命名空間:對(duì)每個(gè)模塊都是全局的。作為最后的嘗試,Python將假設(shè)x是內(nèi)置函數(shù)或變量。
4、如果Python在這些名字空間找不到x,它將放棄查找并引發(fā)一個(gè)NameError異常,如,NameError:name'aa'isnotdefined。
嵌套函數(shù)的情況:
1、先在當(dāng)前(嵌套的或lambda)函數(shù)的命名空間中搜索
2、然后是在父函數(shù)的命名空間中搜索
3、接著是模塊命名空間中搜索
4、最后在內(nèi)置命名空間中搜索
以上內(nèi)容為大家介紹了Python命名空間實(shí)例解析,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.2667701.com/