国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python命名空間詳解

2020-02-23 05:38:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

通俗的來(lái)說(shuō),Python中所謂的命名空間可以理解為一個(gè)容器。在這個(gè)容器中可以裝許多標(biāo)識(shí)符。不同容器中的同名的標(biāo)識(shí)符是不會(huì)相互沖突的。理解python的命名空間需要掌握三條規(guī)則:

第一,賦值(包括顯式賦值和隱式賦值)產(chǎn)生標(biāo)識(shí)符,賦值的地點(diǎn)決定標(biāo)識(shí)符所處的命名空間。

第二,函數(shù)定義(包括def和lambda)產(chǎn)生新的命名空間。

第三,python搜索一個(gè)標(biāo)識(shí)符的順序是"LEGB"。

所謂的"LEGB"是python中四層命名空間的英文名字首字母的縮寫(xiě)。
最里面的一層是L(local),表示在一個(gè)函數(shù)定義中,而且在這個(gè)函數(shù)里面沒(méi)有再包含函數(shù)的定義。
第二層E(enclosing function),表示在一個(gè)函數(shù)定義中,但這個(gè)函數(shù)里面還包含有函數(shù)的定義,其實(shí)L層和E層只是相對(duì)的。
第三層G(global),是指一個(gè)模塊的命名空間,也就是說(shuō)在一個(gè).py文件中定義的標(biāo)識(shí)符,但不在一個(gè)函數(shù)中。
第四層B(builtin),是指python解釋器啟動(dòng)時(shí)就已經(jīng)具有的命名空間,之所以叫builtin是因?yàn)樵趐ython解釋器啟動(dòng)時(shí)會(huì)自動(dòng)載入__builtin__模塊,這個(gè)模塊中的list、str等內(nèi)置函數(shù)的就處于B層的命名空間中。

這三條規(guī)則通過(guò)一個(gè)例子來(lái)看比較明白。如下面例子所示:

>>> g = int('0x3', 0)>>> def outFunc():  e = 2    g = 10  def inFunc():     l = 1     return g + e    return inFunc()>>> outFunc() ===> 12

來(lái)詳細(xì)看看這段代碼中的標(biāo)識(shí)符。
第1行,適用第一條規(guī)則“賦值產(chǎn)生標(biāo)識(shí)符”,因此產(chǎn)生一個(gè)標(biāo)識(shí)符g。“賦值的地點(diǎn)決定標(biāo)識(shí)符所處的命名空間”,因?yàn)間是沒(méi)有在一個(gè)函數(shù)定義中,因此g處于'G'層命名空間中。這一行中還有一個(gè)標(biāo)識(shí)符,那就是int。那么int是在什么地方定義的呢?由于int是內(nèi)置函數(shù),是在__builtin__模塊中定義的,所以int就處于'B'的層命名空間中。
第2行,適用第一條規(guī)則,由于def中包含一個(gè)隱性的賦值過(guò)程,這一行產(chǎn)生一個(gè)標(biāo)識(shí)符outFunc,outFunc并不處于一個(gè)函數(shù)定義的內(nèi)部,因此,outFunc處于'G'層命名空間中。此外,這一行還適用第二條規(guī)則,產(chǎn)生一個(gè)新的命名空間。
第3行,適用第一條規(guī)則,產(chǎn)生個(gè)標(biāo)識(shí)符e,而且由于這是在一個(gè)函數(shù)定義內(nèi),并且內(nèi)部還有函數(shù)定義,因此e處于'E'層命名空間中。
第4行要注意,適用第一條規(guī)則,產(chǎn)生一個(gè)標(biāo)識(shí)符g,這個(gè)g與e一樣外于'E'層命名空間中。這個(gè)g與第一行的g是不同的,因?yàn)樗幍拿臻g不一樣。
第5行,適用第一條規(guī)則,產(chǎn)生一個(gè)處于'E'層命名空間的標(biāo)識(shí)符inFunc。與第2行一樣,這一行定義函數(shù)也產(chǎn)生一個(gè)新的命名空間。
第6行,適用第一條規(guī)則,產(chǎn)生一個(gè)標(biāo)識(shí)符l,由于這個(gè)l處于一個(gè)函數(shù)內(nèi)部,而且在這個(gè)函數(shù)內(nèi)部沒(méi)有其他函數(shù)的定義,因此l處于'L'層命名空間中。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 右玉县| 北辰区| 朝阳区| 通辽市| 湖北省| 广昌县| 安阳县| 红桥区| 阜阳市| 呼图壁县| 珲春市| 新沂市| 柯坪县| 定远县| 金门县| 乐亭县| 上杭县| 临清市| 揭东县| 紫金县| 上林县| 麻江县| 布尔津县| 平武县| 铜梁县| 绍兴市| 基隆市| 洛阳市| 甘孜| 宁远县| 屏南县| 铜梁县| 绥滨县| 彝良县| 金山区| 望都县| 丰台区| 山丹县| 盐池县| 隆德县| 丰城市|