Python3 2官方文件翻譯 作用域和命名空間

2021-09-22 11:07:58 字數 2365 閱讀 8828

在介紹類之前。首先我想告訴你一些關於python

作用域的規則。

類的定義很巧妙地運用了命名空間,你須要知道範圍和命名空間的工作原理以能全面了解接下來發生的。 順便說一下,關於這節講到的知識對於不論什麼優秀的python

程式猿很實用。

讓我們開始以一些定義開始。

命名空間(namespace

)是乙個從名稱到物件的對映。大多命名空間眼下用

python

字典實現的,但那通常不會被注意(除非為了效能),在將來它能夠改變。命名空間的樣例是:內建名稱的

set(包括函式如

abs()

和內建異常名稱)。在模組中的全域性變數名稱;在函式呼叫時的區域性名稱。在一定程度上物件的屬性賦值形成乙個命名空間。掌握命名空間的重要事情是在不同的命名空間絕對沒有關係。比如。兩個不同的模組都能夠不混淆的定義方法

maximize

。模組的使用者必須用模組名稱為字首。 

隨便說一下。我習慣上吧每個跟在點號(.

)後面的屬性都稱為屬性(

attribute)。

比如在表示式z.real

。real

是物件z

的乙個屬性。嚴格意義上講。在模組中引用的名稱都是屬性的引用:在表示式

modname.funcname,modname

是乙個模組物件和

funcnam

是它的乙個屬性。 在這個樣例,這恰好是在於模組屬性和在模組定義中的全域性變數名稱之間的乙個簡單的對映:它們共享相同的命名空間。

屬性是可讀的或者是可寫的。在後一種情況下。同意對屬性賦值。假設模組屬性是可寫的,你能夠這麼寫。modername.the_answer = 42. 

可寫屬性也能夠用

del語句刪除。比如。

del modname.the_answer

將會從名叫

modname

模組中移除屬性 

the_answer。

命名空間能夠在不同的時間裡存在而且有不同的生命週期。

當python

直譯器啟動時,包括內建名稱的命名空間就會建立。而且從不刪除。當模組定義讀入時,模組的全域性命名空間就會建立。正常來說。模組命名空間一直存在直到直譯器退出。

通過直譯器的頂層呼叫執行。從指令碼檔案裡讀取或者互動,都覺得是_main_

模組的一部分,因此他們也有自己的全域性命名空間。(內建名稱實際也存在於乙個模組。稱為

builtins.)

當函式呼叫時函式的區域性命名空間就會建立,當函式返回值或者丟擲在方法中沒有處理的異常時,就會刪除。當然,每乙個遞迴呼叫都有自己的區域性命名空間。

作用域就是乙個python

程式能夠直接訪問命名空間的正文區域。

這裡「直接訪問」的意思就是乙個名稱的非法引用試圖在命名空間中尋找名稱。

雖然作用域都是靜態定義,可是它們動態使用。

在執行過程中的不論什麼時候,至少有給三個關聯的命名空間能夠直接訪問的作用域:

l 首先被查的是包括區域性變數的最內層作用域 

l 不論什麼關閉函式的作用域。它們以近期封裝的作用域開始進行查詢,包括的不是區域性變數也不是非全域性變數。

l 接著查詢包括當前模組全域性變數的作用域。

l 最後查詢的就是最外面的作用域,它是包括內建方法的命名空間。

假設名稱定義為全域性的,那麼全部的引用和賦值都能夠直接給包括模組全域性變數的中間作用域。

為了又一次繫結在最內層作用域外面發現的變數,nonlocal

語句能夠使用。假設未定義為非本地,這邊變數僅僅能讀取。(讀取這樣的變數的嘗試就會在最內層作用域中產生乙個本地區域性變數,而外部那個同樣識別符號的變數不會改變)

通常,區域性作用域引用當前函式的區域性變數。

函式外面,區域性作用域引用引用和全域性作用一樣的命名空間:模組命名空間。類定義也會在區域性作用域中引入還有乙個命名空間。

知道作用域能夠在文字中定義是很重要的。

在模組中定義函式的全域性作用域是那個模組的命名空間,無論函式從**或者用何種名稱呼叫。還有一方面,對名稱的真正查詢是在執行時候動態查詢的。可是。語言的定義正在向編譯時靜態名稱確定進化。因此不要依賴動態名稱解決。(其實,區域性變數已經靜態定義了)

python乙個特別之處是

--假設沒有全域性變數有效

--名稱的賦值經常進入最內層的範圍。賦值不會拷貝資料

--它們緊緊是把名稱繫結在物件上。刪除也是一樣。

del語句就會移除從區域性作用域的命名空間去掉與

x的繫結。

其實。介紹新名稱的全部操作都用區域性變數,特別是,import

語句和函式定義在區域性區域性作用域中繫結模組或者函式名稱。

global語句能夠用來描寫敘述活動在全域性作用域中的特別變數而且應該繫結在那裡。

nonlocal

語句描寫敘述活動在封裝作用域中的特別變數並在那裡繫結。

Python3 2官方文件翻譯 模板

string模組包含乙個用途廣泛的類,此類為終端使用者的編輯提供了簡單的語法支援。這讓使用者不修改應用程式的前提下實現他們應用程式的定製。這種格式使用 加有效的 python 識別符號 數字 字母和下劃線 形式的佔位符名稱。通過在佔位符兩側使用大括號便可以不用空格分隔在其後面跟隨更多的字母和數字字元...

Python3 2官方文件翻譯 迭代器

到眼下為止。你可能已注意到很多容器物件都能夠用for 語句進行迴圈 這樣的訪問風格清楚簡潔方便。迭代器的應用是python 遍歷統一。在這樣的場景背後。for語句呼叫容器物件 iter 方法。函式返回乙個迭代器物件。在迭代器物件裡定義了每次僅僅能訪問乙個元素的方法 next 當容器裡面沒有元素的時候...

Python3 2官方文件翻譯 檔案讀寫

open 方法返回乙個檔案物件,在大多數情況下傳遞兩個物件 open filename,mode 例如 f open tmp workfile w 第乙個引數是包含檔名稱的字串,第二個引數是包含描述檔案使用方式的字串。如果檔案唯讀標記為 r 只寫標記為 w 相同名字的已經存在檔案將會被清除 a 表示...