名字空間
python使用叫做名字空間的東西來記錄變量的軌跡.名字空間只是一個dictionary,它的鍵字就是變量名,它的值就是那些變量的值.實際上,名字空間可以象Python的dictionary一樣進(jìn)行訪問.
局部名字空間:
每個函數(shù)都有著自已的名字空間--局部名字空間,它記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量.
全局名字空間:
每個模塊擁有它自已的名字空間--全局名字空間,它記錄了模塊的變量,包括函數(shù),類,其它導(dǎo)入的模塊,模塊級的變量和常量.
>>內(nèi)置名字空間:
任何模塊均可訪問它,它存放著內(nèi)置的函數(shù)和異常.
當(dāng)一行代碼要使用變量x的值時,Python會到所有可用的名字空間去查找變量,按照如下順序:
局部名字空間-特指當(dāng)前函數(shù)或類的方法.如果函數(shù)定義了一個局部變量x,或一個參數(shù)x,Python將使用它,并停止搜索;
全局名字空間-特指當(dāng)前的模塊.如果模塊定義了一個名為x的變量,函數(shù)或類,Python將使用它并停止搜索;
內(nèi)置名字空間-對每個模塊都是全局的.作為最后的嘗試,Python將假設(shè)x是內(nèi)置函數(shù)或變量.
如果Python在這些名字空間找不到x,它將放棄查找并引發(fā)一個NameError異常,同時傳遞Thereisnovariablenamed'x'這樣一條信息.
Python2.2引入了一種略有不同但重要的改變,它會影響名字空間的搜索順序:嵌套的作用域.在Python2.2版本之前,當(dāng)在一個嵌套函數(shù)或lambda函數(shù)中引用一個變量時,Python會在當(dāng)前(嵌套的或lambda)函數(shù)的名字空間中搜索,然后在模塊的名字空間.Python2.2將只在當(dāng)前(嵌套的或lambda)函數(shù)的名字空間中搜索,然后是在父函數(shù)的名字空間中搜索,接著是模塊的名字空間中搜索.Python2.1可以兩種方式工作,缺省地,按Python2.0的方式工作.但是可以把下面一行代碼增加到模塊的頭部,使模塊工作起來象Python2.2的方式:
from__future__importnested_scopes
以上內(nèi)容為大家介紹了Python語言專題,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。