術(shù)語(yǔ)對照表?

>>>?

交互式終端中默認的 Python 提示符。往往會(huì )顯示于能以交互方式在解釋器里執行的樣例代碼之前。

...?

具有以下含義:

  • 交互式終端中輸入特殊代碼行時(shí)默認的 Python 提示符,包括:縮進(jìn)的代碼塊,成對的分隔符之內(圓括號、方括號、花括號或三重引號),或是指定一個(gè)裝飾器之后。

  • Ellipsis 內置常量。

2to3?

把 Python 2.x 代碼轉換為 Python 3.x 代碼的工具,通過(guò)解析源碼,遍歷解析樹(shù),處理絕大多數檢測到的不兼容問(wèn)題。

2to3 包含在標準庫中,模塊名為 lib2to3;提供了獨立入口點(diǎn) Tools/scripts/2to3。詳見(jiàn) 2to3 - 自動(dòng)將 Python 2 代碼轉為 Python 3 代碼。

abstract base class -- 抽象基類(lèi)?

抽象基類(lèi)簡(jiǎn)稱(chēng) ABC,是對 duck-typing 的補充,它提供了一種定義接口的新方式,相比之下其他技巧例如 hasattr() 顯得過(guò)于笨拙或有微妙錯誤(例如使用 魔術(shù)方法)。ABC 引入了虛擬子類(lèi),這種類(lèi)并非繼承自其他類(lèi),但卻仍能被 isinstance()issubclass() 所認可;詳見(jiàn) abc 模塊文檔。Python 自帶許多內置的 ABC 用于實(shí)現數據結構(在 collections.abc 模塊中)、數字(在 numbers 模塊中)、流(在 io 模塊中)、導入查找器和加載器(在 importlib.abc 模塊中)。你可以使用 abc 模塊來(lái)創(chuàng )建自己的 ABC。

annotation -- 標注?

關(guān)聯(lián)到某個(gè)變量、類(lèi)屬性、函數形參或返回值的標簽,被約定作為 type hint 來(lái)使用。

局部變量的標注在運行時(shí)不可訪(fǎng)問(wèn),但全局變量、類(lèi)屬性和函數的標注會(huì )分別存放模塊、類(lèi)和函數的 __annotations__ 特殊屬性中。

參見(jiàn) variable annotation, function annotation, PEP 484PEP 526,對此功能均有介紹。 另請參見(jiàn) 對象注解屬性的最佳實(shí)踐 了解使用標注的最佳實(shí)踐。

argument -- 參數?

在調用函數時(shí)傳給 function (或 method )的值。參數分為兩種:

  • 關(guān)鍵字參數: 在函數調用中前面帶有標識符(例如 name=)或者作為包含在前面帶有 ** 的字典里的值傳入。舉例來(lái)說(shuō),35 在以下對 complex() 的調用中均屬于關(guān)鍵字參數:

    complex(real=3, imag=5)
    complex(**{'real': 3, 'imag': 5})
    
  • 位置參數: 不屬于關(guān)鍵字參數的參數。位置參數可出現于參數列表的開(kāi)頭以及/或者作為前面帶有 *iterable 里的元素被傳入。舉例來(lái)說(shuō),35 在以下調用中均屬于位置參數:

    complex(3, 5)
    complex(*(3, 5))
    

參數會(huì )被賦值給函數體中對應的局部變量。有關(guān)賦值規則參見(jiàn) 調用 一節。根據語(yǔ)法,任何表達式都可用來(lái)表示一個(gè)參數;最終算出的值會(huì )被賦給對應的局部變量。

另參見(jiàn) parameter 術(shù)語(yǔ)表條目,常見(jiàn)問(wèn)題中 參數與形參的區別 以及 PEP 362。

asynchronous context manager -- 異步上下文管理器?

此種對象通過(guò)定義 __aenter__()__aexit__() 方法來(lái)對 async with 語(yǔ)句中的環(huán)境進(jìn)行控制。由 PEP 492 引入。

asynchronous generator -- 異步生成器?

返回值為 asynchronous generator iterator 的函數。它與使用 async def 定義的協(xié)程函數很相似,不同之處在于它包含 yield 表達式以產(chǎn)生一系列可在 async for 循環(huán)中使用的值。

此術(shù)語(yǔ)通常是指異步生成器函數,但在某些情況下則可能是指 異步生成器迭代器。如果需要清楚表達具體含義,請使用全稱(chēng)以避免歧義。

一個(gè)異步生成器函數可能包含 await 表達式或者 async for 以及 async with 語(yǔ)句。

asynchronous generator iterator -- 異步生成器迭代器?

asynchronous generator 函數所創(chuàng )建的對象。

此對象屬于 asynchronous iterator,當使用 __anext__() 方法調用時(shí)會(huì )返回一個(gè)可等待對象來(lái)執行異步生成器函數的代碼直到下一個(gè) yield 表達式。

每個(gè) yield 會(huì )臨時(shí)暫停處理,記住當前位置執行狀態(tài) (包括局部變量和掛起的 try 語(yǔ)句)。當該 異步生成器迭代器 與其他 __anext__() 返回的可等待對象有效恢復時(shí),它會(huì )從離開(kāi)位置繼續執行。參見(jiàn) PEP 492PEP 525。

asynchronous iterable -- 異步可迭代對象?

可在 async for 語(yǔ)句中被使用的對象。必須通過(guò)它的 __aiter__() 方法返回一個(gè) asynchronous iterator。由 PEP 492 引入。

asynchronous iterator -- 異步迭代器?

實(shí)現了 __aiter__()__anext__() 方法的對象。__anext__ 必須返回一個(gè) awaitable 對象。async for 會(huì )處理異步迭代器的 __anext__() 方法所返回的可等待對象,直到其引發(fā)一個(gè) StopAsyncIteration 異常。由 PEP 492 引入。

attribute -- 屬性?

關(guān)聯(lián)到一個(gè)對象的值,可以使用點(diǎn)號表達式通過(guò)其名稱(chēng)來(lái)引用。例如,如果一個(gè)對象 o 具有一個(gè)屬性 a,就可以用 o.a 來(lái)引用它。

awaitable -- 可等待對象?

能在 await 表達式中使用的對象??梢允?coroutine 或是具有 __await__() 方法的對象。參見(jiàn) PEP 492。

BDFL?

“終身仁慈獨裁者”的英文縮寫(xiě),即 Guido van Rossum,Python 的創(chuàng )造者。

binary file -- 二進(jìn)制文件?

file object 能夠讀寫(xiě) 字節類(lèi)對象。二進(jìn)制文件的例子包括以二進(jìn)制模式('rb', 'wb' or 'rb+')打開(kāi)的文件、sys.stdin.buffer、sys.stdout.buffer 以及 io.BytesIOgzip.GzipFile 的實(shí)例。

另請參見(jiàn) text file 了解能夠讀寫(xiě) str 對象的文件對象。

borrowed reference -- 借入引用?

在 Python 的 C API 中,借入引用是指一種對象引用。 它不會(huì )修改對象引用計數。 如果對象被銷(xiāo)毀則它會(huì )成為一個(gè)無(wú)目標指針。 例如,垃圾回收器可以移除對象的最后一個(gè) strong reference 來(lái)銷(xiāo)毀它。

推薦在 borrowed reference 上調用 Py_INCREF() 以將其原地轉換為 strong reference,除非是當該對象無(wú)法在借入引用的最后一次使用之前被銷(xiāo)毀。 Py_NewRef() 函數可以被用來(lái)創(chuàng )建一個(gè)新的 strong reference。

bytes-like object -- 字節類(lèi)對象?

支持 緩沖協(xié)議 并且能導出 C-contiguous 緩沖的對象。這包括所有 bytes、bytearrayarray.array 對象,以及許多普通 memoryview 對象。字節類(lèi)對象可在多種二進(jìn)制數據操作中使用;這些操作包括壓縮、保存為二進(jìn)制文件以及通過(guò)套接字發(fā)送等。

某些操作需要可變的二進(jìn)制數據。這種對象在文檔中常被稱(chēng)為“可讀寫(xiě)字節類(lèi)對象”??勺兙彌_對象的例子包括 bytearray 以及 bytearraymemoryview。其他操作要求二進(jìn)制數據存放于不可變對象 ("只讀字節類(lèi)對象");這種對象的例子包括 bytes 以及 bytes 對象的 memoryview。

bytecode -- 字節碼?

Python 源代碼會(huì )被編譯為字節碼,即 CPython 解釋器中表示 Python 程序的內部代碼。字節碼還會(huì )緩存在 .pyc 文件中,這樣第二次執行同一文件時(shí)速度更快(可以免去將源碼重新編譯為字節碼)。這種 "中間語(yǔ)言" 運行在根據字節碼執行相應機器碼的 virtual machine 之上。請注意不同 Python 虛擬機上的字節碼不一定通用,也不一定能在不同 Python 版本上兼容。

字節碼指令列表可以在 dis 模塊 的文檔中查看。

callback -- 回調?

一個(gè)作為參數被傳入以用以在未來(lái)的某個(gè)時(shí)刻被調用的子例程函數。

class -- 類(lèi)?

用來(lái)創(chuàng )建用戶(hù)定義對象的模板。類(lèi)定義通常包含對該類(lèi)的實(shí)例進(jìn)行操作的方法定義。

class variable -- 類(lèi)變量?

在類(lèi)中定義的變量,并且僅限在類(lèi)的層級上修改 (而不是在類(lèi)的實(shí)例中修改)。

complex number -- 復數?

對普通實(shí)數系統的擴展,其中所有數字都被表示為一個(gè)實(shí)部和一個(gè)虛部的和。虛數是虛數單位(-1 的平方根)的實(shí)倍數,通常在數學(xué)中寫(xiě)為 i,在工程學(xué)中寫(xiě)為 j。Python 內置了對復數的支持,采用工程學(xué)標記方式;虛部帶有一個(gè) j 后綴,例如 3+1j。如果需要 math 模塊內對象的對應復數版本,請使用 cmath,復數的使用是一個(gè)比較高級的數學(xué)特性。如果你感覺(jué)沒(méi)有必要,忽略它們也幾乎不會(huì )有任何問(wèn)題。

context manager -- 上下文管理器?

with 語(yǔ)句中使用,通過(guò)定義 __enter__()__exit__() 方法來(lái)控制環(huán)境狀態(tài)的對象。參見(jiàn) PEP 343。

context variable -- 上下文變量?

一種根據其所屬的上下文可以具有不同的值的變量。 這類(lèi)似于在線(xiàn)程局部存儲中每個(gè)執行線(xiàn)程可以具有不同的變量值。 不過(guò),對于上下文變量來(lái)說(shuō),一個(gè)執行線(xiàn)程中可能會(huì )有多個(gè)上下文,而上下文變量的主要用途是對并發(fā)異步任務(wù)中變量進(jìn)行追蹤。 參見(jiàn) contextvars。

contiguous -- 連續?

一個(gè)緩沖如果是 C 連續Fortran 連續 就會(huì )被認為是連續的。零維緩沖是 C 和 Fortran 連續的。在一維數組中,所有條目必須在內存中彼此相鄰地排列,采用從零開(kāi)始的遞增索引順序。在多維 C-連續數組中,當按內存地址排列時(shí)用最后一個(gè)索引訪(fǎng)問(wèn)條目時(shí)速度最快。但是在 Fortran 連續數組中則是用第一個(gè)索引最快。

coroutine -- 協(xié)程?

協(xié)程是子例程的更一般形式。 子例程可以在某一點(diǎn)進(jìn)入并在另一點(diǎn)退出。 協(xié)程則可以在許多不同的點(diǎn)上進(jìn)入、退出和恢復。 它們可通過(guò) async def 語(yǔ)句來(lái)實(shí)現。 參見(jiàn) PEP 492。

coroutine function -- 協(xié)程函數?

返回一個(gè) coroutine 對象的函數。協(xié)程函數可通過(guò) async def 語(yǔ)句來(lái)定義,并可能包含 await、async forasync with 關(guān)鍵字。這些特性是由 PEP 492 引入的。

CPython?

Python 編程語(yǔ)言的規范實(shí)現,在 python.org 上發(fā)布。"CPython" 一詞用于在必要時(shí)將此實(shí)現與其他實(shí)現例如 Jython 或 IronPython 相區別。

decorator -- 裝飾器?

返回值為另一個(gè)函數的函數,通常使用 @wrapper 語(yǔ)法形式來(lái)進(jìn)行函數變換。 裝飾器的常見(jiàn)例子包括 classmethod()staticmethod()。

裝飾器語(yǔ)法只是一種語(yǔ)法糖,以下兩個(gè)函數定義在語(yǔ)義上完全等價(jià):

def f(arg):
    ...
f = staticmethod(f)

@staticmethod
def f(arg):
    ...

同樣的概念也適用于類(lèi),但通常較少這樣使用。有關(guān)裝飾器的詳情可參見(jiàn) 函數定義類(lèi)定義 的文檔。

descriptor -- 描述器?

任何定義了 __get__(), __set__()__delete__() 方法的對象。當一個(gè)類(lèi)屬性為描述器時(shí),它的特殊綁定行為就會(huì )在屬性查找時(shí)被觸發(fā)。通常情況下,使用 a.b 來(lái)獲取、設置或刪除一個(gè)屬性時(shí)會(huì )在 a 的類(lèi)字典中查找名稱(chēng)為 b 的對象,但如果 b 是一個(gè)描述器,則會(huì )調用對應的描述器方法。理解描述器的概念是更深層次理解 Python 的關(guān)鍵,因為這是許多重要特性的基礎,包括函數、方法、屬性、類(lèi)方法、靜態(tài)方法以及對超類(lèi)的引用等等。

有關(guān)描述器的方法的更多信息,請參閱 實(shí)現描述器描述器使用指南。

dictionary -- 字典?

一個(gè)關(guān)聯(lián)數組,其中的任意鍵都映射到相應的值。鍵可以是任何具有 __hash__()__eq__() 方法的對象。在 Perl 語(yǔ)言中稱(chēng)為 hash。

dictionary comprehension -- 字典推導式?

處理一個(gè)可迭代對象中的所有或部分元素并返回結果字典的一種緊湊寫(xiě)法。 results = {n: n ** 2 for n in range(10)} 將生成一個(gè)由鍵 n 到值 n ** 2 的映射構成的字典。 參見(jiàn) 列表、集合與字典的顯示。

dictionary view -- 字典視圖?

dict.keys(), dict.values()dict.items() 返回的對象被稱(chēng)為字典視圖。它們提供了字典條目的一個(gè)動(dòng)態(tài)視圖,這意味著(zhù)當字典改變時(shí),視圖也會(huì )相應改變。要將字典視圖強制轉換為真正的列表,可使用 list(dictview)。參見(jiàn) 字典視圖對象。

docstring -- 文檔字符串?

作為類(lèi)、函數或模塊之內的第一個(gè)表達式出現的字符串字面值。它在代碼執行時(shí)會(huì )被忽略,但會(huì )被解釋器識別并放入所在類(lèi)、函數或模塊的 __doc__ 屬性中。由于它可用于代碼內省,因此是對象存放文檔的規范位置。

duck-typing -- 鴨子類(lèi)型?

指一種編程風(fēng)格,它并不依靠查找對象類(lèi)型來(lái)確定其是否具有正確的接口,而是直接調用或使用其方法或屬性(“看起來(lái)像鴨子,叫起來(lái)也像鴨子,那么肯定就是鴨子?!保┯捎趶娬{接口而非特定類(lèi)型,設計良好的代碼可通過(guò)允許多態(tài)替代來(lái)提升靈活性。鴨子類(lèi)型避免使用 type()isinstance() 檢測。(但要注意鴨子類(lèi)型可以使用 抽象基類(lèi) 作為補充。) 而往往會(huì )采用 hasattr() 檢測或是 EAFP 編程。

EAFP?

“求原諒比求許可更容易”的英文縮寫(xiě)。這種 Python 常用代碼編寫(xiě)風(fēng)格會(huì )假定所需的鍵或屬性存在,并在假定錯誤時(shí)捕獲異常。這種簡(jiǎn)潔快速風(fēng)格的特點(diǎn)就是大量運用 tryexcept 語(yǔ)句。于其相對的則是所謂 LBYL 風(fēng)格,常見(jiàn)于 C 等許多其他語(yǔ)言。

expression -- 表達式?

可以求出某個(gè)值的語(yǔ)法單元。 換句話(huà)說(shuō),一個(gè)表達式就是表達元素例如字面值、名稱(chēng)、屬性訪(fǎng)問(wèn)、運算符或函數調用的匯總,它們最終都會(huì )返回一個(gè)值。 與許多其他語(yǔ)言不同,并非所有語(yǔ)言構件都是表達式。 還存在不能被用作表達式的 statement,例如 while。 賦值也是屬于語(yǔ)句而非表達式。

extension module -- 擴展模塊?

以 C 或 C++ 編寫(xiě)的模塊,使用 Python 的 C API 來(lái)與語(yǔ)言核心以及用戶(hù)代碼進(jìn)行交互。

f-string -- f-字符串?

帶有 'f''F' 前綴的字符串字面值通常被稱(chēng)為“f-字符串”即 格式化字符串字面值 的簡(jiǎn)寫(xiě)。參見(jiàn) PEP 498。

file object -- 文件對象?

對外提供面向文件 API 以使用下層資源的對象(帶有 read()write() 這樣的方法)。根據其創(chuàng )建方式的不同,文件對象可以處理對真實(shí)磁盤(pán)文件,對其他類(lèi)型存儲,或是對通訊設備的訪(fǎng)問(wèn)(例如標準輸入/輸出、內存緩沖區、套接字、管道等等)。文件對象也被稱(chēng)為 文件類(lèi)對象。

實(shí)際上共有三種類(lèi)別的文件對象: 原始 二進(jìn)制文件, 緩沖 二進(jìn)制文件 以及 文本文件。它們的接口定義均在 io 模塊中。創(chuàng )建文件對象的規范方式是使用 open() 函數。

file-like object -- 文件類(lèi)對象?

file object 的同義詞。

filesystem encoding and error handler -- 文件系統編碼格式與錯誤處理句柄?

Python 用來(lái)從操作系統解碼字節串和向操作系統編碼 Unicode 的編碼格式與錯誤處理句柄。

文件系統編碼格式必須保證能成功解碼長(cháng)度在 128 以下的所有字節串。 如果文件系統編碼格式無(wú)法提供此保證,則 API 函數可能會(huì )引發(fā) UnicodeError。

sys.getfilesystemencoding()sys.getfilesystemencodeerrors() 函數可被用來(lái)獲取文件系統編碼格式與錯誤處理句柄。

filesystem encoding and error handler 是在 Python 啟動(dòng)時(shí)通過(guò) PyConfig_Read() 函數來(lái)配置的:請參閱 PyConfigfilesystem_encodingfilesystem_errors 等成員。

另請參見(jiàn) locale encoding。

finder -- 查找器?

一種會(huì )嘗試查找被導入模塊的 loader 的對象。

從 Python 3.3 起存在兩種類(lèi)型的查找器: 元路徑查找器 配合 sys.meta_path 使用,以及 path entry finders 配合 sys.path_hooks 使用。

更多詳情可參見(jiàn) PEP 302, PEP 420PEP 451。

floor division -- 向下取整除法?

向下舍入到最接近的整數的數學(xué)除法。向下取整除法的運算符是 // 。例如,表達式 11 // 4 的計算結果是 2 ,而與之相反的是浮點(diǎn)數的真正除法返回 2.75 。注意 (-11) // 4 會(huì )返回 -3 因為這是 -2.75 向下 舍入得到的結果。見(jiàn) PEP 238 。

function -- 函數?

可以向調用者返回某個(gè)值的一組語(yǔ)句。還可以向其傳入零個(gè)或多個(gè) 參數 并在函數體執行中被使用。另見(jiàn) parameter, method函數定義 等節。

function annotation -- 函數標注?

即針對函數形參或返回值的 annotation 。

函數標注通常用于 類(lèi)型提示:例如以下函數預期接受兩個(gè) int 參數并預期返回一個(gè) int 值:

def sum_two_numbers(a: int, b: int) -> int:
   return a + b

函數標注語(yǔ)法的詳解見(jiàn) 函數定義 一節。

參見(jiàn) variable annotationPEP 484,其中描述了此功能。 另請參閱 對象注解屬性的最佳實(shí)踐 以了解使用標的最佳實(shí)踐。

__future__?

future 語(yǔ)句, from __future__ import <feature> 指示編譯器使用將在未來(lái)的 Python 發(fā)布版中成為標準的語(yǔ)法和語(yǔ)義來(lái)編譯當前模塊。 __future__ 模塊文檔記錄了可能 的 feature 取值。 通過(guò)導入此模塊并對其變量求值,你可以看到每項新特性在何時(shí)被首次加入到該語(yǔ)言中以及它將(或已)在何時(shí)成為默認:

>>>
>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
garbage collection -- 垃圾回收?

釋放不再被使用的內存空間的過(guò)程。Python 是通過(guò)引用計數和一個(gè)能夠檢測和打破循環(huán)引用的循環(huán)垃圾回收器來(lái)執行垃圾回收的??梢允褂?gc 模塊來(lái)控制垃圾回收器。

generator -- 生成器?

返回一個(gè) generator iterator 的函數。它看起來(lái)很像普通函數,不同點(diǎn)在于其包含 yield 表達式以便產(chǎn)生一系列值供給 for-循環(huán)使用或是通過(guò) next() 函數逐一獲取。

通常是指生成器函數,但在某些情況下也可能是指 生成器迭代器。如果需要清楚表達具體含義,請使用全稱(chēng)以避免歧義。

generator iterator -- 生成器迭代器?

generator 函數所創(chuàng )建的對象。

每個(gè) yield 會(huì )臨時(shí)暫停處理,記住當前位置執行狀態(tài)(包括局部變量和掛起的 try 語(yǔ)句)。當該 生成器迭代器 恢復時(shí),它會(huì )從離開(kāi)位置繼續執行(這與每次調用都從新開(kāi)始的普通函數差別很大)。

generator expression -- 生成器表達式?

返回一個(gè)迭代器的表達式。 它看起來(lái)很像普通表達式后面帶有定義了一個(gè)循環(huán)變量、范圍的 for 子句,以及一個(gè)可選的 if 子句。 以下復合表達式會(huì )為外層函數生成一系列值:

>>>
>>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
285
generic function -- 泛型函數?

為不同的類(lèi)型實(shí)現相同操作的多個(gè)函數所組成的函數。在調用時(shí)會(huì )由調度算法來(lái)確定應該使用哪個(gè)實(shí)現。

另請參見(jiàn) single dispatch 術(shù)語(yǔ)表條目、functools.singledispatch() 裝飾器以及 PEP 443。

generic type -- 泛型類(lèi)型?

A type that can be parameterized; typically a container class such as list or dict. Used for type hints and annotations.

For more details, see generic alias types, PEP 483, PEP 484, PEP 585, and the typing module.

GIL?

參見(jiàn) global interpreter lock。

global interpreter lock -- 全局解釋器鎖?

CPython 解釋器所采用的一種機制,它確保同一時(shí)刻只有一個(gè)線(xiàn)程在執行 Python bytecode。此機制通過(guò)設置對象模型(包括 dict 等重要內置類(lèi)型)針對并發(fā)訪(fǎng)問(wèn)的隱式安全簡(jiǎn)化了 CPython 實(shí)現。給整個(gè)解釋器加鎖使得解釋器多線(xiàn)程運行更方便,其代價(jià)則是犧牲了在多處理器上的并行性。

不過(guò),某些標準庫或第三方庫的擴展模塊被設計為在執行計算密集型任務(wù)如壓縮或哈希時(shí)釋放 GIL。此外,在執行 I/O 操作時(shí)也總是會(huì )釋放 GIL。

創(chuàng )建一個(gè)(以更精細粒度來(lái)鎖定共享數據的)“自由線(xiàn)程”解釋器的努力從未獲得成功,因為這會(huì )犧牲在普通單處理器情況下的性能。據信克服這種性能問(wèn)題的措施將導致實(shí)現變得更復雜,從而更難以維護。

hash-based pyc -- 基于哈希的 pyc?

使用對應源文件的哈希值而非最后修改時(shí)間來(lái)確定其有效性的字節碼緩存文件。 參見(jiàn) 已緩存字節碼的失效。

hashable -- 可哈希?

一個(gè)對象的哈希值如果在其生命周期內絕不改變,就被稱(chēng)為 可哈希 (它需要具有 __hash__() 方法),并可以同其他對象進(jìn)行比較(它需要具有 __eq__() 方法)??晒ο蟊仨毦哂邢嗤墓V当容^結果才會(huì )相同。

可哈希性使得對象能夠作為字典鍵或集合成員使用,因為這些數據結構要在內部使用哈希值。

大多數 Python 中的不可變內置對象都是可哈希的;可變容器(例如列表或字典)都不可哈希;不可變容器(例如元組和 frozenset)僅當它們的元素均為可哈希時(shí)才是可哈希的。 用戶(hù)定義類(lèi)的實(shí)例對象默認是可哈希的。 它們在比較時(shí)一定不相同(除非是與自己比較),它們的哈希值的生成是基于它們的 id()。

IDLE?

Python 的 IDE,“集成開(kāi)發(fā)與學(xué)習環(huán)境”的英文縮寫(xiě)。是 Python 標準發(fā)行版附帶的基本編輯器和解釋器環(huán)境。

immutable -- 不可變對象?

具有固定值的對象。不可變對象包括數字、字符串和元組。這樣的對象不能被改變。如果必須存儲一個(gè)不同的值,則必須創(chuàng )建新的對象。它們在需要常量哈希值的地方起著(zhù)重要作用,例如作為字典中的鍵。

import path -- 導入路徑?

由多個(gè)位置(或 路徑條目)組成的列表,會(huì )被模塊的 path based finder 用來(lái)查找導入目標。在導入時(shí),此位置列表通常來(lái)自 sys.path,但對次級包來(lái)說(shuō)也可能來(lái)自上級包的 __path__ 屬性。

importing -- 導入?

令一個(gè)模塊中的 Python 代碼能為另一個(gè)模塊中的 Python 代碼所使用的過(guò)程。

importer -- 導入器?

查找并加載模塊的對象;此對象既屬于 finder 又屬于 loader。

interactive -- 交互?

Python 帶有一個(gè)交互式解釋器,即你可以在解釋器提示符后輸入語(yǔ)句和表達式,立即執行并查看其結果。只需不帶參數地啟動(dòng) python 命令(也可以在你的計算機開(kāi)始菜單中選擇相應菜單項)。在測試新想法或檢驗模塊和包的時(shí)候用這種方式會(huì )非常方便(請記得使用 help(x))。

interpreted -- 解釋型?

Python 一是種解釋型語(yǔ)言,與之相對的是編譯型語(yǔ)言,雖然兩者的區別由于字節碼編譯器的存在而會(huì )有所模糊。這意味著(zhù)源文件可以直接運行而不必顯式地創(chuàng )建可執行文件再運行。解釋型語(yǔ)言通常具有比編譯型語(yǔ)言更短的開(kāi)發(fā)/調試周期,但是其程序往往運行得更慢。參見(jiàn) interactive。

interpreter shutdown -- 解釋器關(guān)閉?

當被要求關(guān)閉時(shí),Python 解釋器將進(jìn)入一個(gè)特殊運行階段并逐步釋放所有已分配資源,例如模塊和各種關(guān)鍵內部結構等。它還會(huì )多次調用 垃圾回收器。這會(huì )觸發(fā)用戶(hù)定義析構器或弱引用回調中的代碼執行。在關(guān)閉階段執行的代碼可能會(huì )遇到各種異常,因為其所依賴(lài)的資源已不再有效(常見(jiàn)的例子有庫模塊或警告機制等)。

解釋器需要關(guān)閉的主要原因有 __main__ 模塊或所運行的腳本已完成執行。

iterable -- 可迭代對象?

An object capable of returning its members one at a time. Examples of iterables include all sequence types (such as list, str, and tuple) and some non-sequence types like dict, file objects, and objects of any classes you define with an __iter__() method or with a __getitem__() method that implements sequence semantics.

可迭代對象被可用于 for 循環(huán)以及許多其他需要一個(gè)序列的地方(zip()、map() ...)。當一個(gè)可迭代對象作為參數傳給內置函數 iter() 時(shí),它會(huì )返回該對象的迭代器。這種迭代器適用于對值集合的一次性遍歷。在使用可迭代對象時(shí),你通常不需要調用 iter() 或者自己處理迭代器對象。for 語(yǔ)句會(huì )為你自動(dòng)處理那些操作,創(chuàng )建一個(gè)臨時(shí)的未命名變量用來(lái)在循環(huán)期間保存迭代器。參見(jiàn) iterator、sequence 以及 generator。

iterator -- 迭代器?

用來(lái)表示一連串數據流的對象。重復調用迭代器的 __next__() 方法(或將其傳給內置函數 next())將逐個(gè)返回流中的項。當沒(méi)有數據可用時(shí)則將引發(fā) StopIteration 異常。到這時(shí)迭代器對象中的數據項已耗盡,繼續調用其 __next__() 方法只會(huì )再次引發(fā) StopIteration 異常。迭代器必須具有 __iter__() 方法用來(lái)返回該迭代器對象自身,因此迭代器必定也是可迭代對象,可被用于其他可迭代對象適用的大部分場(chǎng)合。一個(gè)顯著(zhù)的例外是那些會(huì )多次重復訪(fǎng)問(wèn)迭代項的代碼。容器對象(例如 list)在你每次向其傳入 iter() 函數或是在 for 循環(huán)中使用它時(shí)都會(huì )產(chǎn)生一個(gè)新的迭代器。如果在此情況下你嘗試用迭代器則會(huì )返回在之前迭代過(guò)程中被耗盡的同一迭代器對象,使其看起來(lái)就像是一個(gè)空容器。

更多信息可查看 迭代器類(lèi)型。

CPython implementation detail: CPython does not consistently apply the requirement that an iterator define __iter__().

key function -- 鍵函數?

鍵函數或稱(chēng)整理函數,是能夠返回用于排序或排位的值的可調用對象。例如,locale.strxfrm() 可用于生成一個(gè)符合特定區域排序約定的排序鍵。

Python 中有許多工具都允許用鍵函數來(lái)控制元素的排位或分組方式。其中包括 min(), max(), sorted(), list.sort(), heapq.merge(), heapq.nsmallest(), heapq.nlargest() 以及 itertools.groupby()。

There are several ways to create a key function. For example. the str.lower() method can serve as a key function for case insensitive sorts. Alternatively, a key function can be built from a lambda expression such as lambda r: (r[0], r[2]). Also, operator.attrgetter(), operator.itemgetter(), and operator.methodcaller() are three key function constructors. See the Sorting HOW TO for examples of how to create and use key functions.

keyword argument -- 關(guān)鍵字參數?

參見(jiàn) argument。

lambda?

由一個(gè)單獨 expression 構成的匿名內聯(lián)函數,表達式會(huì )在調用時(shí)被求值。創(chuàng )建 lambda 函數的句法為 lambda [parameters]: expression

LBYL?

“先查看后跳躍”的英文縮寫(xiě)。這種代碼編寫(xiě)風(fēng)格會(huì )在進(jìn)行調用或查找之前顯式地檢查前提條件。此風(fēng)格與 EAFP 方式恰成對比,其特點(diǎn)是大量使用 if 語(yǔ)句。

在多線(xiàn)程環(huán)境中,LBYL 方式會(huì )導致“查看”和“跳躍”之間發(fā)生條件競爭風(fēng)險。例如,以下代碼 if key in mapping: return mapping[key] 可能由于在檢查操作之后其他線(xiàn)程從 mapping 中移除了 key 而出錯。這種問(wèn)題可通過(guò)加鎖或使用 EAFP 方式來(lái)解決。

locale encoding -- 語(yǔ)言區域編碼格式?

On Unix, it is the encoding of the LC_CTYPE locale. It can be set with locale.setlocale(locale.LC_CTYPE, new_locale).

On Windows, it is the ANSI code page (ex: "cp1252").

On Android and VxWorks, Python uses "utf-8" as the locale encoding.

locale.getencoding() can be used to get the locale encoding.

See also the filesystem encoding and error handler.

list -- 列表?

Python 內置的一種 sequence。雖然名為列表,但更類(lèi)似于其他語(yǔ)言中的數組而非鏈接列表,因為訪(fǎng)問(wèn)元素的時(shí)間復雜度為 O(1)。

list comprehension -- 列表推導式?

處理一個(gè)序列中的所有或部分元素并返回結果列表的一種緊湊寫(xiě)法。result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] 將生成一個(gè) 0 到 255 范圍內的十六進(jìn)制偶數對應字符串(0x..)的列表。其中 if 子句是可選的,如果省略則 range(256) 中的所有元素都會(huì )被處理。

loader -- 加載器?

負責加載模塊的對象。它必須定義名為 load_module() 的方法。加載器通常由一個(gè) finder 返回。詳情參見(jiàn) PEP 302,對于 abstract base class 可參見(jiàn) importlib.abc.Loader。

magic method -- 魔術(shù)方法?

special method 的非正式同義詞 。

mapping -- 映射?

A container object that supports arbitrary key lookups and implements the methods specified in the collections.abc.Mapping or collections.abc.MutableMapping abstract base classes. Examples include dict, collections.defaultdict, collections.OrderedDict and collections.Counter.

meta path finder -- 元路徑查找器?

sys.meta_path 的搜索所返回的 finder。元路徑查找器與 path entry finders 存在關(guān)聯(lián)但并不相同。

請查看 importlib.abc.MetaPathFinder 了解元路徑查找器所實(shí)現的方法。

metaclass -- 元類(lèi)?

一種用于創(chuàng )建類(lèi)的類(lèi)。類(lèi)定義包含類(lèi)名、類(lèi)字典和基類(lèi)列表。元類(lèi)負責接受上述三個(gè)參數并創(chuàng )建相應的類(lèi)。大部分面向對象的編程語(yǔ)言都會(huì )提供一個(gè)默認實(shí)現。Python 的特別之處在于可以創(chuàng )建自定義元類(lèi)。大部分用戶(hù)永遠不需要這個(gè)工具,但當需要出現時(shí),元類(lèi)可提供強大而優(yōu)雅的解決方案。它們已被用于記錄屬性訪(fǎng)問(wèn)日志、添加線(xiàn)程安全性、跟蹤對象創(chuàng )建、實(shí)現單例,以及其他許多任務(wù)。

更多詳情參見(jiàn) 元類(lèi)。

method -- 方法?

在類(lèi)內部定義的函數。如果作為該類(lèi)的實(shí)例的一個(gè)屬性來(lái)調用,方法將會(huì )獲取實(shí)例對象作為其第一個(gè) argument (通常命名為 self)。參見(jiàn) functionnested scope。

method resolution order -- 方法解析順序?

方法解析順序就是在查找成員時(shí)搜索全部基類(lèi)所用的先后順序。請查看 Python 2.3 方法解析順序 了解自 2.3 版起 Python 解析器所用相關(guān)算法的詳情。

module -- 模塊?

此對象是 Python 代碼的一種組織單位。各模塊具有獨立的命名空間,可包含任意 Python 對象。模塊可通過(guò) importing 操作被加載到 Python 中。

另見(jiàn) package。

module spec -- 模塊規格?

一個(gè)命名空間,其中包含用于加載模塊的相關(guān)導入信息。是 importlib.machinery.ModuleSpec 的實(shí)例。

MRO?

參見(jiàn) method resolution order。

mutable -- 可變對象?

可變對象可以在其 id() 保持固定的情況下改變其取值。另請參見(jiàn) immutable。

named tuple -- 具名元組?

術(shù)語(yǔ)“具名元組”可用于任何繼承自元組,并且其中的可索引元素還能使用名稱(chēng)屬性來(lái)訪(fǎng)問(wèn)的類(lèi)型或類(lèi)。 這樣的類(lèi)型或類(lèi)還可能擁有其他特性。

有些內置類(lèi)型屬于具名元組,包括 time.localtime()os.stat() 的返回值。 另一個(gè)例子是 sys.float_info:

>>>
>>> sys.float_info[1]                   # indexed access
1024
>>> sys.float_info.max_exp              # named field access
1024
>>> isinstance(sys.float_info, tuple)   # kind of tuple
True

有些具名元組是內置類(lèi)型(例如上面的例子)。 此外,具名元組還可通過(guò)常規類(lèi)定義從 tuple 繼承并定義名稱(chēng)字段的方式來(lái)創(chuàng )建。 這樣的類(lèi)可以手工編寫(xiě),或者使用工廠(chǎng)函數 collections.namedtuple() 創(chuàng )建。 后一種方式還會(huì )添加一些手工編寫(xiě)或內置具名元組所沒(méi)有的額外方法。

namespace -- 命名空間?

命名空間是存放變量的場(chǎng)所。命名空間有局部、全局和內置的,還有對象中的嵌套命名空間(在方法之內)。命名空間通過(guò)防止命名沖突來(lái)支持模塊化。例如,函數 builtins.openos.open() 可通過(guò)各自的命名空間來(lái)區分。命名空間還通過(guò)明確哪個(gè)模塊實(shí)現那個(gè)函數來(lái)幫助提高可讀性和可維護性。例如,random.seed()itertools.islice() 這種寫(xiě)法明確了這些函數是由 randomitertools 模塊分別實(shí)現的。

namespace package -- 命名空間包?

PEP 420 所引入的一種僅被用作子包的容器的 package,命名空間包可以沒(méi)有實(shí)體表示物,其描述方式與 regular package 不同,因為它們沒(méi)有 __init__.py 文件。

另可參見(jiàn) module。

nested scope -- 嵌套作用域?

在一個(gè)定義范圍內引用變量的能力。例如,在另一函數之內定義的函數可以引用前者的變量。請注意嵌套作用域默認只對引用有效而對賦值無(wú)效。局部變量的讀寫(xiě)都受限于最內層作用域。類(lèi)似的,全局變量的讀寫(xiě)則作用于全局命名空間。通過(guò) nonlocal 關(guān)鍵字可允許寫(xiě)入外層作用域。

new-style class -- 新式類(lèi)?

對于目前已被應于所有類(lèi)對象的類(lèi)形式的舊稱(chēng)謂。在早先的 Python 版本中,只有新式類(lèi)能夠使用 Python 新增的更靈活特性,例如 __slots__、描述符、特征屬性、__getattribute__()、類(lèi)方法和靜態(tài)方法等。

object -- 對象?

任何具有狀態(tài)(屬性或值)以及預定義行為(方法)的數據。object 也是任何 new-style class 的最頂層基類(lèi)名。

package -- 包?

一種可包含子模塊或遞歸地包含子包的 Python module。從技術(shù)上說(shuō),包是帶有 __path__ 屬性的 Python 模塊。

另參見(jiàn) regular packagenamespace package。

parameter -- 形參?

function (或方法)定義中的命名實(shí)體,它指定函數可以接受的一個(gè) argument (或在某些情況下,多個(gè)實(shí)參)。有五種形參:

  • positional-or-keyword:位置或關(guān)鍵字,指定一個(gè)可以作為 位置參數 傳入也可以作為 關(guān)鍵字參數 傳入的實(shí)參。這是默認的形參類(lèi)型,例如下面的 foobar:

    def func(foo, bar=None): ...
    
  • positional-only:僅限位置,指定一個(gè)只能通過(guò)位置傳入的參數。 僅限位置形參可通過(guò)在函數定義的形參列表中它們之后包含一個(gè) / 字符來(lái)定義,例如下面的 posonly1posonly2:

    def func(posonly1, posonly2, /, positional_or_keyword): ...
    
  • keyword-only:僅限關(guān)鍵字,指定一個(gè)只能通過(guò)關(guān)鍵字傳入的參數。僅限關(guān)鍵字形參可通過(guò)在函數定義的形參列表中包含單個(gè)可變位置形參或者在多個(gè)可變位置形參之前放一個(gè) * 來(lái)定義,例如下面的 kw_only1kw_only2:

    def func(arg, *, kw_only1, kw_only2): ...
    
  • var-positional:可變位置,指定可以提供由一個(gè)任意數量的位置參數構成的序列(附加在其他形參已接受的位置參數之后)。這種形參可通過(guò)在形參名稱(chēng)前加綴 * 來(lái)定義,例如下面的 args:

    def func(*args, **kwargs): ...
    
  • var-keyword:可變關(guān)鍵字,指定可以提供任意數量的關(guān)鍵字參數(附加在其他形參已接受的關(guān)鍵字參數之后)。這種形參可通過(guò)在形參名稱(chēng)前加綴 ** 來(lái)定義,例如上面的 kwargs。

形參可以同時(shí)指定可選和必選參數,也可以為某些可選參數指定默認值。

另參見(jiàn) argument 術(shù)語(yǔ)表條目、參數與形參的區別 中的常見(jiàn)問(wèn)題、inspect.Parameter 類(lèi)、函數定義 一節以及 PEP 362。

path entry -- 路徑入口?

import path 中的一個(gè)單獨位置,會(huì )被 path based finder 用來(lái)查找要導入的模塊。

path entry finder -- 路徑入口查找器?

任一可調用對象使用 sys.path_hooks (即 path entry hook) 返回的 finder,此種對象能通過(guò) path entry 來(lái)定位模塊。

請參看 importlib.abc.PathEntryFinder 以了解路徑入口查找器所實(shí)現的各個(gè)方法。

path entry hook -- 路徑入口鉤子?

一種可調用對象,在知道如何查找特定 path entry 中的模塊的情況下能夠使用 sys.path_hook 列表返回一個(gè) path entry finder。

path based finder -- 基于路徑的查找器?

默認的一種 元路徑查找器,可在一個(gè) import path 中查找模塊。

path-like object -- 路徑類(lèi)對象?

代表一個(gè)文件系統路徑的對象。類(lèi)路徑對象可以是一個(gè)表示路徑的 str 或者 bytes 對象,還可以是一個(gè)實(shí)現了 os.PathLike 協(xié)議的對象。一個(gè)支持 os.PathLike 協(xié)議的對象可通過(guò)調用 os.fspath() 函數轉換為 str 或者 bytes 類(lèi)型的文件系統路徑;os.fsdecode()os.fsencode() 可被分別用來(lái)確保獲得 strbytes 類(lèi)型的結果。此對象是由 PEP 519 引入的。

PEP?

“Python 增強提議”的英文縮寫(xiě)。一個(gè) PEP 就是一份設計文檔,用來(lái)向 Python 社區提供信息,或描述一個(gè) Python 的新增特性及其進(jìn)度或環(huán)境。PEP 應當提供精確的技術(shù)規格和所提議特性的原理說(shuō)明。

PEP 應被作為提出主要新特性建議、收集社區對特定問(wèn)題反饋以及為必須加入 Python 的設計決策編寫(xiě)文檔的首選機制。PEP 的作者有責任在社區內部建立共識,并應將不同意見(jiàn)也記入文檔。

參見(jiàn) PEP 1。

portion -- 部分?

構成一個(gè)命名空間包的單個(gè)目錄內文件集合(也可能存放于一個(gè) zip 文件內),具體定義見(jiàn) PEP 420。

positional argument -- 位置參數?

參見(jiàn) argument。

provisional API -- 暫定 API?

暫定 API 是指被有意排除在標準庫的向后兼容性保證之外的應用編程接口。雖然此類(lèi)接口通常不會(huì )再有重大改變,但只要其被標記為暫定,就可能在核心開(kāi)發(fā)者確定有必要的情況下進(jìn)行向后不兼容的更改(甚至包括移除該接口)。此種更改并不會(huì )隨意進(jìn)行 -- 僅在 API 被加入之前未考慮到的嚴重基礎性缺陷被發(fā)現時(shí)才可能會(huì )這樣做。

即便是對暫定 API 來(lái)說(shuō),向后不兼容的更改也會(huì )被視為“最后的解決方案” —— 任何問(wèn)題被確認時(shí)都會(huì )盡可能先嘗試找到一種向后兼容的解決方案。

這種處理過(guò)程允許標準庫持續不斷地演進(jìn),不至于被有問(wèn)題的長(cháng)期性設計缺陷所困。詳情見(jiàn) PEP 411。

provisional package -- 暫定包?

參見(jiàn) provisional API。

Python 3000?

Python 3.x 發(fā)布路線(xiàn)的昵稱(chēng)(這個(gè)名字在版本 3 的發(fā)布還遙遙無(wú)期的時(shí)候就已出現了)。有時(shí)也被縮寫(xiě)為“Py3k”。

Pythonic?

指一個(gè)思路或一段代碼緊密遵循了 Python 語(yǔ)言最常用的風(fēng)格和理念,而不是使用其他語(yǔ)言中通用的概念來(lái)實(shí)現代碼。例如,Python 的常用風(fēng)格是使用 for 語(yǔ)句循環(huán)來(lái)遍歷一個(gè)可迭代對象中的所有元素。許多其他語(yǔ)言沒(méi)有這樣的結構,因此不熟悉 Python 的人有時(shí)會(huì )選擇使用一個(gè)數字計數器:

for i in range(len(food)):
    print(food[i])

而相應的更簡(jiǎn)潔更 Pythonic 的方法是這樣的:

for piece in food:
    print(piece)
qualified name -- 限定名稱(chēng)?

一個(gè)以點(diǎn)號分隔的名稱(chēng),顯示從模塊的全局作用域到該模塊中定義的某個(gè)類(lèi)、函數或方法的“路徑”,相關(guān)定義見(jiàn) PEP 3155。對于最高層級的函數和類(lèi),限定名稱(chēng)與對象名稱(chēng)一致:

>>>
>>> class C:
...     class D:
...         def meth(self):
...             pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__qualname__
'C.D.meth'

當被用于引用模塊時(shí),完整限定名稱(chēng) 意為標示該模塊的以點(diǎn)號分隔的整個(gè)路徑,其中包含其所有的父包,例如 email.mime.text:

>>>
>>> import email.mime.text
>>> email.mime.text.__name__
'email.mime.text'
reference count -- 引用計數?

The number of references to an object. When the reference count of an object drops to zero, it is deallocated. Reference counting is generally not visible to Python code, but it is a key element of the CPython implementation. Programmers can call the sys.getrefcount() function to return the reference count for a particular object.

regular package -- 常規包?

傳統型的 package,例如包含有一個(gè) __init__.py 文件的目錄。

另參見(jiàn) namespace package。

__slots__?

一種寫(xiě)在類(lèi)內部的聲明,通過(guò)預先聲明實(shí)例屬性等對象并移除實(shí)例字典來(lái)節省內存。雖然這種技巧很流行,但想要用好卻并不容易,最好是只保留在少數情況下采用,例如極耗內存的應用程序,并且其中包含大量實(shí)例。

sequence -- 序列?

一種 iterable,它支持通過(guò) __getitem__() 特殊方法來(lái)使用整數索引進(jìn)行高效的元素訪(fǎng)問(wèn),并定義了一個(gè)返回序列長(cháng)度的 __len__() 方法。內置的序列類(lèi)型有 list、str、tuplebytes。注意雖然 dict 也支持 __getitem__()__len__(),但它被認為屬于映射而非序列,因為它查找時(shí)使用任意的 immutable 鍵而非整數。

collections.abc.Sequence 抽象基類(lèi)定義了一個(gè)更豐富的接口,它在 __getitem__()__len__() 之外又添加了 count(), index(), __contains__()__reversed__()。 實(shí)現此擴展接口的類(lèi)型可以使用 register() 來(lái)顯式地注冊。

set comprehension -- 集合推導式?

處理一個(gè)可迭代對象中的所有或部分元素并返回結果集合的一種緊湊寫(xiě)法。 results = {c for c in 'abracadabra' if c not in 'abc'} 將生成字符串集合 {'r', 'd'}。 參見(jiàn) 列表、集合與字典的顯示。

single dispatch -- 單分派?

一種 generic function 分派形式,其實(shí)現是基于單個(gè)參數的類(lèi)型來(lái)選擇的。

slice -- 切片?

通常只包含了特定 sequence 的一部分的對象。切片是通過(guò)使用下標標記來(lái)創(chuàng )建的,在 [] 中給出幾個(gè)以冒號分隔的數字,例如 variable_name[1:3:5]。方括號(下標)標記在內部使用 slice 對象。

special method -- 特殊方法?

一種由 Python 隱式調用的方法,用來(lái)對某個(gè)類(lèi)型執行特定操作例如相加等等。這種方法的名稱(chēng)的首尾都為雙下劃線(xiàn)。特殊方法的文檔參見(jiàn) 特殊方法名稱(chēng)。

statement -- 語(yǔ)句?

語(yǔ)句是程序段(一個(gè)代碼“塊”)的組成單位。一條語(yǔ)句可以是一個(gè) expression 或某個(gè)帶有關(guān)鍵字的結構,例如 if、whilefor。

strong reference -- 強引用?

在 Python 的 C API 中,強引用是對象引用的一種,當它被創(chuàng )建時(shí)將會(huì )增加對象引用計數而當它被刪除時(shí)則會(huì )減少對象引用計數。

Py_NewRef() 函數可被用于創(chuàng )建一個(gè)對象的強引用。 通常,必須在退出某個(gè)強引用的作用域時(shí)在該強引用上調用 Py_DECREF() 函數,以避免引用的泄漏。

另請參閱 borrowed reference。

text encoding -- 文本編碼?

A string in Python is a sequence of Unicode code points (in range U+0000--U+10FFFF). To store or transfer a string, it needs to be serialized as a sequence of bytes.

Serializing a string into a sequence of bytes is known as "encoding", and recreating the string from the sequence of bytes is known as "decoding".

There are a variety of different text serialization codecs, which are collectively referred to as "text encodings".

text file -- 文本文件?

一種能夠讀寫(xiě) str 對象的 file object。通常一個(gè)文本文件實(shí)際是訪(fǎng)問(wèn)一個(gè)面向字節的數據流并自動(dòng)處理 text encoding。文本文件的例子包括以文本模式('r''w')打開(kāi)的文件、sys.stdin、sys.stdout 以及 io.StringIO 的實(shí)例。

另請參看 binary file 了解能夠讀寫(xiě) 字節類(lèi)對象 的文件對象。

triple-quoted string -- 三引號字符串?

首尾各帶三個(gè)連續雙引號(")或者單引號(')的字符串。它們在功能上與首尾各用一個(gè)引號標注的字符串沒(méi)有什么不同,但是有多種用處。它們允許你在字符串內包含未經(jīng)轉義的單引號和雙引號,并且可以跨越多行而無(wú)需使用連接符,在編寫(xiě)文檔字符串時(shí)特別好用。

type -- 類(lèi)型?

類(lèi)型決定一個(gè) Python 對象屬于什么種類(lèi);每個(gè)對象都具有一種類(lèi)型。要知道對象的類(lèi)型,可以訪(fǎng)問(wèn)它的 __class__ 屬性,或是通過(guò) type(obj) 來(lái)獲取。

type alias -- 類(lèi)型別名?

一個(gè)類(lèi)型的同義詞,創(chuàng )建方式是把類(lèi)型賦值給特定的標識符。

類(lèi)型別名的作用是簡(jiǎn)化 類(lèi)型提示。例如:

def remove_gray_shades(
        colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
    pass

可以這樣提高可讀性:

Color = tuple[int, int, int]

def remove_gray_shades(colors: list[Color]) -> list[Color]:
    pass

參見(jiàn) typingPEP 484,其中有對此功能的詳細描述。

type hint -- 類(lèi)型提示?

annotation 為變量、類(lèi)屬性、函數的形參或返回值指定預期的類(lèi)型。

類(lèi)型提示屬于可選項,Python 不要求提供,但其可對靜態(tài)類(lèi)型分析工具起作用,并可協(xié)助 IDE 實(shí)現代碼補全與重構。

全局變量、類(lèi)屬性和函數的類(lèi)型提示可以使用 typing.get_type_hints() 來(lái)訪(fǎng)問(wèn),但局部變量則不可以。

參見(jiàn) typingPEP 484,其中有對此功能的詳細描述。

universal newlines -- 通用換行?

一種解讀文本流的方式,將以下所有符號都識別為行結束標志:Unix 的行結束約定 '\n'、Windows 的約定 '\r\n' 以及舊版 Macintosh 的約定 '\r'。參見(jiàn) PEP 278PEP 3116bytes.splitlines() 了解更多用法說(shuō)明。

variable annotation -- 變量標注?

對變量或類(lèi)屬性的 annotation。

在標注變量或類(lèi)屬性時(shí),還可選擇為其賦值:

class C:
    field: 'annotation'

變量標注通常被用作 類(lèi)型提示:例如以下變量預期接受 int 類(lèi)型的值:

count: int = 0

變量標注語(yǔ)法的詳細解釋見(jiàn) 帶標注的賦值語(yǔ)句 一節。

參見(jiàn) function annotation, PEP 484PEP 526,其中描述了此功能。 另請參閱 對象注解屬性的最佳實(shí)踐 以了解使用標注的最佳實(shí)踐。

virtual environment -- 虛擬環(huán)境?

一種采用協(xié)作式隔離的運行時(shí)環(huán)境,允許 Python 用戶(hù)和應用程序在安裝和升級 Python 分發(fā)包時(shí)不會(huì )干擾到同一系統上運行的其他 Python 應用程序的行為。

另參見(jiàn) venv。

virtual machine -- 虛擬機?

一臺完全通過(guò)軟件定義的計算機。Python 虛擬機可執行字節碼編譯器所生成的 bytecode。

Zen of Python -- Python 之禪?

列出 Python 設計的原則與哲學(xué),有助于理解與使用這種語(yǔ)言。查看其具體內容可在交互模式提示符中輸入 "import this"。