Python命名空間的本質(zhì)和加載順序-創(chuàng)新互聯(lián)

Python的命名空間是Python程序猿必須了解的內(nèi)容,對(duì)Python命名空間的學(xué)習(xí),將使我們?cè)诒举|(zhì)上掌握一些Python中的瑣碎的規(guī)則。

創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、新和網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為新和等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

接下來我將分四部分揭示Python命名空間的本質(zhì):一、命名空間的定義;二、命名空間的查找順序;三、命名空間的生命周期;四、通過locals()和globals() BIF訪問命名空間

重點(diǎn)是第四部分,我們將在此部分觀察命名空間的內(nèi)容。

一、命名空間

Python使用叫做命名空間的東西來記錄變量的軌跡。命名空間是一個(gè) 字典(dictionary) ,它的鍵就是變量名,它的值就是那些變量的值。

A namespace is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries。

 在一個(gè) Python 程序中的任何一個(gè)地方,都存在幾個(gè)可用的命名空間。

     1、每個(gè)函數(shù)都有著自已的命名空間,叫做局部命名空間,它記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量。

     2、每個(gè)模塊擁有它自已的命名空間,叫做全局命名空間,它記錄了模塊的變量,包括函數(shù)、類、其它導(dǎo)入的模塊、模塊級(jí)的變量和常量。

     3、還有就是內(nèi)置命名空間,任何模塊均可訪問它,它存放著內(nèi)置的函數(shù)和異常。

名稱空間的加載順序

內(nèi)置命名空間(程序運(yùn)行前加載)-->全局命名空間(程序運(yùn)行中:從上到下加載)-->局部命名空間(程序運(yùn)行中:調(diào)用時(shí)才加載)

二、名稱空間的取值順序

在局部調(diào)用:局部命名空間-->全局命名空間-->內(nèi)置命名空間

在全局調(diào)用:全局命名空間-->內(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' is not defined。

嵌套函數(shù)的情況:

     1、先在當(dāng)前 (嵌套的或 lambda) 函數(shù)的命名空間中搜索

     2、然后是在父函數(shù)的命名空間中搜索

     3、接著是模塊命名空間中搜索

     4、最后在內(nèi)置命名空間中搜索

示例:


info = "Adress : "
def func_father(country):
 def func_son(area):
  city= "Shanghai " #此處的city變量,覆蓋了父函數(shù)的city變量
  print(info + country + city + area)
 city = " Beijing "
 #調(diào)用內(nèi)部函數(shù)
 func_son("ChaoYang ");
 
func_father("China ")

網(wǎng)站題目:Python命名空間的本質(zhì)和加載順序-創(chuàng)新互聯(lián)
分享路徑:http://muchs.cn/article10/dodcgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)