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

首頁 > 編程 > Python > 正文

Python進階_關于命名空間與作用域(詳解)

2020-02-16 01:36:51
字體:
來源:轉載
供稿:網友

寫在前面

如非特別說明,下文均基于Python3

命名空間與作用于跟名字的綁定相關性很大,可以結合另一篇介紹Python名字、對象及其綁定的文章。

1. 命名空間

1.1 什么是命名空間

Namespace命名空間,也稱名字空間,是從名字到對象的映射。Python中,大部分的命名空間都是由字典來實現的,但是本文的不會涉及命名空間的實現。命名空間的一大作用是避免名字沖突:

def fun1():  i = 1def fun2():  i = 2

同一個模塊中的兩個函數中,兩個同名名字i之間絕沒有任何關系,因為它們分屬于不同明明空間。

1.2 命名空間的種類

常見的命名空間有:

built-in名字集合,包括像abs()這樣的函數,以及內置的異常名字等。通常,使用內置這個詞表示這個命名空間-內置命名空間

模塊全局名字集合,直接定義在模塊中的名字,如類,函數,導入的其他模塊等。通常,使用全局命名空間表示。

函數調用過程中的名字集合,函數中的參數,函數體定義的名字等,在函數調用時被“激活”,構成了一個命名空間。通常,使用局部命名空間表示。

一個對象的屬性集合,也構成了一個命名空間。但通常使用objname.attrname的間接方式訪問屬性,而不是直接訪問,故不將其列入命名空間討論。

類定義的命名空間,通常解釋器進入類定義時,即執行到class ClassName:語句,會新建一個命名空間。(見官方對類定義的說明)

1.3 命名空間的生命周期

不同類型的命名空間有不同的生命周期:

內置命名空間,在Python解釋器啟動時創建,解釋器退出時銷毀;

全局命名空間,模塊的全局命名空間在模塊定義被解釋器讀入時創建,解釋器退出時銷毀;

局部命名空間,這里要區分函數以及類定義。函數的局部命名空間,在函數調用時創建,函數返回或者由未捕獲的異常時銷毀;類定義的命名空間,在解釋器讀到類定義創建,類定義結束后銷毀。(關于類定義的命名空間,在類定義結束后銷毀,但其實類對象就是這個命名空間內容的包裝,見官方對類定義的說明)

2. 作用域

2.1 什么是作用域

作用域是Python的一塊文本區域,這個區域中,命名空間可以被“直接訪問”。這里的直接訪問指的是試圖在命名空間中找到名字的絕對引用(非限定引用)。這里有必要解釋下直接引用和間接引用:

直接引用;直接使用名字訪問的方式,如name,這種方式嘗試在名字空間中搜索名字name。

間接引用;使用形如objname.attrname的方式,即屬性引用,這種方式不會在命名空間中搜索名字attrname,而是搜索名字objname,再訪問其屬性。

2.2 與命名空間的關系

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌黎县| 武定县| 湖北省| 宕昌县| 甘孜县| 宜良县| 凉城县| 郁南县| 兴和县| 社会| 九江县| 宜春市| 彰武县| 延吉市| 汉中市| 阿瓦提县| 彰化县| 郧西县| 本溪| 昭平县| 积石山| 衡山县| 大港区| 南平市| 同江市| 依安县| 海阳市| 灌阳县| 邛崃市| 兴义市| 江孜县| 沂水县| 浮梁县| 新源县| 比如县| 土默特左旗| 广宗县| 汤原县| 喀喇沁旗| 宜兰市| 牙克石市|