Python術語對照表

阿木古冷發表於2020-12-09

  • >>>

    互動式終端中預設的 Python 提示符。往往會顯示於能以互動方式在直譯器裡執行的樣例程式碼之前。

  • ...

    可以是指:互動式終端中輸入特殊程式碼行時預設的 Python 提示符,包括:縮排的程式碼塊,成對的分隔符之內(圓括號、方括號、花括號或三重引號),或是指定一個裝飾器之後。Ellipsis 內建常量。

  • 2to3

    一個將 Python 2.x 程式碼轉換為 Python 3.x 程式碼的工具,能夠處理大部分通過解析原始碼並遍歷解析樹可檢測到的不相容問題。2to3 包含在標準庫中,模組名為 lib2to3;並提供一個獨立入口點 Tools/scripts/2to3。參見 2to3 - 自動將 Python 2 程式碼轉為 Python 3 程式碼

  • abstract base class -- 抽象基類

    抽象基類簡稱 ABC,是對 duck-typing 的補充,它提供了一種定義介面的新方式,相比之下其他技巧例如 hasattr() 顯得過於笨拙或有微妙錯誤(例如使用 魔術方法)。ABC 引入了虛擬子類,這種類並非繼承自其他類,但卻仍能被 isinstance()issubclass() 所認可;詳見 abc 模組文件。Python 自帶許多內建的 ABC 用於實現資料結構(在 collections.abc 模組中)、數字(在 numbers 模組中)、流(在 io 模組中)、匯入查詢器和載入器(在 importlib.abc 模組中)。你可以使用 abc 模組來建立自己的 ABC。

  • annotation -- 標註

    關聯到某個變數、類屬性、函式形參或返回值的標籤,被約定作為 type hint 來使用。區域性變數的標註在執行時不可訪問,但全域性變數、類屬性和函式的標註會分別存放模組、類和函式的 __annotations__ 特殊屬性中。參見 variable annotationfunction annotationPEP 484PEP 526,對此功能均有介紹。

  • argument -- 引數

    在呼叫函式時傳給 function (或 method )的值。引數分為兩種:關鍵字引數: 在函式呼叫中前面帶有識別符號(例如 name=)或者作為包含在前面帶有 ** 的字典裡的值傳入。舉例來說,35 在以下對 complex() 的呼叫中均屬於關鍵字引數:complex(real=3, imag=5) complex(**{'real': 3, 'imag': 5}) 位置引數: 不屬於關鍵字引數的引數。位置引數可出現於引數列表的開頭以及/或者作為前面帶有 *iterable 裡的元素被傳入。舉例來說,35 在以下呼叫中均屬於位置引數:complex(3, 5) complex(*(3, 5)) 引數會被賦值給函式體中對應的區域性變數。有關賦值規則參見 呼叫 一節。根據語法,任何表示式都可用來表示一個引數;最終算出的值會被賦給對應的區域性變數。另參見 parameter 術語表條目,常見問題中 引數與形參的區別 以及 PEP 362

  • asynchronous context manager -- 非同步上下文管理器

    此種物件通過定義 __aenter__()__aexit__() 方法來對 async with 語句中的環境進行控制。由 PEP 492 引入。

  • asynchronous generator -- 非同步生成器

    返回值為 asynchronous generator iterator 的函式。它與使用 async def 定義的協程函式很相似,不同之處在於它包含 yield 表示式以產生一系列可在 async for 迴圈中使用的值。此術語通常是指非同步生成器函式,但在某些情況下則可能是指 非同步生成器迭代器。如果需要清楚表達具體含義,請使用全稱以避免歧義。一個非同步生成器函式可能包含 await 表示式或者 async for 以及 async with 語句。

  • asynchronous generator iterator -- 非同步生成器迭代器

    asynchronous generator 函式所建立的物件。此物件屬於 asynchronous iterator,當使用 __anext__() 方法呼叫時會返回一個可等待物件來執行非同步生成器函式的程式碼直到下一個 yield 表示式。每個 yield 會臨時暫停處理,記住當前位置執行狀態 (包括區域性變數和掛起的 try 語句)。當該 非同步生成器迭代器 與其他 __anext__() 返回的可等待物件有效恢復時,它會從離開位置繼續執行。參見 PEP 492PEP 525

  • asynchronous iterable -- 非同步可迭代物件

    可在 async for 語句中被使用的物件。必須通過它的 __aiter__() 方法返回一個 asynchronous iterator。由 PEP 492 引入。

  • asynchronous iterator -- 非同步迭代器

    實現了 __aiter__()__anext__() 方法的物件。__anext__ 必須返回一個 awaitable 物件。async for 會處理非同步迭代器的 __anext__() 方法所返回的可等待物件,直到其引發一個 StopAsyncIteration 異常。由 PEP 492 引入。

  • attribute -- 屬性

    關聯到一個物件的值,可以使用點號表示式通過其名稱來引用。例如,如果一個物件 o 具有一個屬性 a,就可以用 o.a 來引用它。

  • awaitable -- 可等待物件

    能在 await 表示式中使用的物件。可以是 coroutine 或是具有 __await__() 方法的物件。參見 PEP 492

  • BDFL

    “終身仁慈獨裁者”的英文縮寫,即 Guido van Rossum,Python 的創造者。

  • binary file -- 二進位制檔案

    file object 能夠讀寫 位元組類物件。二進位制檔案的例子包括以二進位制模式('rb', 'wb' or 'rb+')開啟的檔案、sys.stdin.buffersys.stdout.buffer 以及 io.BytesIOgzip.GzipFile 的例項。另請參見 text file 瞭解能夠讀寫 str 物件的檔案物件。

  • bytes-like object -- 位元組類物件

    支援 緩衝協議 並且能匯出 C-contiguous 緩衝的物件。這包括所有 bytesbytearrayarray.array 物件,以及許多普通 memoryview 物件。位元組類物件可在多種二進位制資料操作中使用;這些操作包括壓縮、儲存為二進位制檔案以及通過套接字傳送等。某些操作需要可變的二進位制資料。這種物件在文件中常被稱為“可讀寫位元組類物件”。可變緩衝物件的例子包括 bytearray 以及 bytearraymemoryview。其他操作要求二進位制資料存放於不可變物件 ("只讀位元組類物件");這種物件的例子包括 bytes 以及 bytes 物件的 memoryview

  • bytecode -- 位元組碼

    Python 原始碼會被編譯為位元組碼,即 CPython 直譯器中表示 Python 程式的內部程式碼。位元組碼還會快取在 .pyc 檔案中,這樣第二次執行同一檔案時速度更快(可以免去將原始碼重新編譯為位元組碼)。這種 "中間語言" 執行在根據位元組碼執行相應機器碼的 virtual machine 之上。請注意不同 Python 虛擬機器上的位元組碼不一定通用,也不一定能在不同 Python 版本上相容。位元組碼指令列表可以在 dis 模組 的文件中檢視。

  • callback -- 回撥

    一個作為引數被傳入以用以在未來的某個時刻被呼叫的子例程函式。

  • class -- 類

    用來建立使用者定義物件的模板。類定義通常包含對該類的例項進行操作的方法定義。

  • class variable -- 類變數

    在類中定義的變數,並且僅限在類的層級上修改 (而不是在類的例項中修改)。

  • coercion -- 強制型別轉換

    在包含兩個相同型別引數的操作中,一種型別的例項隱式地轉換為另一種型別。例如,int(3.15) 是將原浮點數轉換為整型數 3,但在 3+4.5 中,引數的型別不一致(一個是 int, 一個是 float),兩者必須轉換為相同型別才能相加,否則將引發 TypeError。如果沒有強制型別轉換機制,程式設計師必須將所有可相容引數歸一化為相同型別,例如要寫成 float(3)+4.5 而不是 3+4.5

  • complex number -- 複數

    對普通實數系統的擴充套件,其中所有數字都被表示為一個實部和一個虛部的和。虛數是虛數單位(-1 的平方根)的實倍數,通常在數學中寫為 i,在工程學中寫為 j。Python 內建了對複數的支援,採用工程學標記方式;虛部帶有一個 j 字尾,例如 3+1j。如果需要 math 模組內物件的對應複數版本,請使用 cmath,複數的使用是一個比較高階的數學特性。如果你感覺沒有必要,忽略它們也幾乎不會有任何問題。

  • context manager -- 上下文管理器

    with 語句中使用,通過定義 __enter__()__exit__() 方法來控制環境狀態的物件。參見 PEP 343

  • context variable -- 上下文變數

    一種根據其所屬的上下文可以具有不同的值的變數。 這類似於線上程區域性儲存中每個執行執行緒可以具有不同的變數值。 不過,對於上下文變數來說,一個執行執行緒中可能會有多個上下文,而上下文變數的主要用途是對併發非同步任務中變數進行追蹤。 參見 contextvars

  • contiguous -- 連續

    一個緩衝如果是 C 連續Fortran 連續 就會被認為是連續的。零維緩衝是 C 和 Fortran 連續的。在一維陣列中,所有條目必須在記憶體中彼此相鄰地排列,採用從零開始的遞增索引順序。在多維 C-連續陣列中,當按記憶體地址排列時用最後一個索引訪問條目時速度最快。但是在 Fortran 連續陣列中則是用第一個索引最快。

  • coroutine -- 協程

    協程是子例程的更一般形式。 子例程可以在某一點進入並在另一點退出。 協程則可以在許多不同的點上進入、退出和恢復。 它們可通過 async def 語句來實現。 參見 PEP 492

  • coroutine function -- 協程函式

    返回一個 coroutine 物件的函式。協程函式可通過 async def 語句來定義,並可能包含 awaitasync forasync with 關鍵字。這些特性是由 PEP 492 引入的。

  • CPython

    Python 程式語言的規範實現,在 python.org 上釋出。"CPython" 一詞用於在必要時將此實現與其他實現例如 Jython 或 IronPython 相區別。

  • decorator -- 裝飾器

    返回值為另一個函式的函式,通常使用 @wrapper 語法形式來進行函式變換。 裝飾器的常見例子包括 classmethod()staticmethod()。裝飾器語法只是一種語法糖,以下兩個函式定義在語義上完全等價:def f(...): ... f = staticmethod(f) @staticmethod def f(...): ... 同的樣概念也適用於類,但通常較少這樣使用。有關裝飾器的詳情可參見 函式定義類定義 的文件。

  • descriptor -- 描述器

    任何定義了 __get__(), __set__()__delete__() 方法的物件。當一個類屬性為描述器時,它的特殊繫結行為就會在屬性查詢時被觸發。通常情況下,使用 a.b 來獲取、設定或刪除一個屬性時會在 a 的類字典中查詢名稱為 b 的物件,但如果 b 是一個描述器,則會呼叫對應的描述器方法。理解描述器的概念是更深層次理解 Python 的關鍵,因為這是許多重要特性的基礎,包括函式、方法、屬性、類方法、靜態方法以及對超類的引用等等。有關描述符的方法的詳情可參看 實現描述器

  • dictionary -- 字典

    一個關聯陣列,其中的任意鍵都對映到相應的值。鍵可以是任何具有 __hash__()__eq__() 方法的物件。在 Perl 語言中稱為 hash。

  • dictionary comprehension -- 字典推導式

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

  • dictionary view -- 字典檢視

    dict.keys(), dict.values()dict.items() 返回的物件被稱為字典檢視。它們提供了字典條目的一個動態檢視,這意味著當字典改變時,檢視也會相應改變。要將字典檢視強制轉換為真正的列表,可使用 list(dictview)。參見 字典檢視物件

  • docstring -- 文件字串

    作為類、函式或模組之內的第一個表示式出現的字串字面值。它在程式碼執行時會被忽略,但會被直譯器識別並放入所在類、函式或模組的 __doc__ 屬性中。由於它可用於程式碼內省,因此是物件存放文件的規範位置。

  • duck-typing -- 鴨子型別

    指一種程式設計風格,它並不依靠查詢物件型別來確定其是否具有正確的介面,而是直接呼叫或使用其方法或屬性(“看起來像鴨子,叫起來也像鴨子,那麼肯定就是鴨子。”)由於強調介面而非特定型別,設計良好的程式碼可通過允許多型替代來提升靈活性。鴨子型別避免使用 type()isinstance() 檢測。(但要注意鴨子型別可以使用 抽象基類 作為補充。) 而往往會採用 hasattr() 檢測或是 EAFP 程式設計。

  • EAFP

    “求原諒比求許可更容易”的英文縮寫。這種 Python 常用程式碼編寫風格會假定所需的鍵或屬性存在,並在假定錯誤時捕獲異常。這種簡潔快速風格的特點就是大量運用 tryexcept 語句。於其相對的則是所謂 LBYL 風格,常見於 C 等許多其他語言。

  • expression -- 表示式

    可以求出某個值的語法單元。 換句話說,一個表示式就是表達元素例如字面值、名稱、屬性訪問、運算子或函式呼叫的彙總,它們最終都會返回一個值。 與許多其他語言不同,並非所有語言構件都是表示式。 還存在不能被用作表示式的 statement,例如 while。 賦值也是屬於語句而非表示式。

  • extension module -- 擴充套件模組

    以 C 或 C++ 編寫的模組,使用 Python 的 C API 來與語言核心以及使用者程式碼進行互動。

  • f-string -- f-字串

    帶有 'f''F' 字首的字串字面值通常被稱為“f-字串”即 格式化字串字面值 的簡寫。參見 PEP 498

  • file object -- 檔案物件

    對外提供面向檔案 API 以使用下層資源的物件(帶有 read()write() 這樣的方法)。根據其建立方式的不同,檔案物件可以處理對真實磁碟檔案,對其他型別儲存,或是對通訊裝置的訪問(例如標準輸入/輸出、記憶體緩衝區、套接字、管道等等)。檔案物件也被稱為 檔案類物件。實際上共有三種類別的檔案物件: 原始 二進位制檔案, 緩衝 二進位制檔案 以及 文字檔案。它們的介面定義均在 io 模組中。建立檔案物件的規範方式是使用 open() 函式。

  • file-like object -- 檔案類物件

    file object 的同義詞。

  • finder -- 查詢器

    一種會嘗試查詢被匯入模組的 loader 的物件。從 Python 3.3 起存在兩種型別的查詢器: 元路徑查詢器 配合 sys.meta_path 使用,以及 path entry finders 配合 sys.path_hooks 使用。更多詳情可參見 PEP 302, PEP 420PEP 451

  • floor division -- 向下取整除法

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

  • function -- 函式

    可以向呼叫者返回某個值的一組語句。還可以向其傳入零個或多個 引數 並在函式體執行中被使用。另見 parameter, method函式定義 等節。

  • function annotation -- 函式標註

    即針對函式形參或返回值的 annotation 。函式標註通常用於 型別提示:例如以下函式預期接受兩個 int 引數並預期返回一個 int 值:def sum_two_numbers(a: int, b: int) -> int: return a + b 函式標註語法的詳解見 函式定義 一節。請參看 variable annotationPEP 484 對此功能的描述。

  • future

    一種偽模組,可被程式設計師用來啟用與當前直譯器不相容的新語言特性。通過匯入 __future__ 模組並對其中的變數求值,你可以檢視新特性何時首次加入語言以及何時成為預設:>>>>>> import __future__ >>> __future__.division _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

  • garbage collection -- 垃圾回收

    釋放不再被使用的記憶體空間的過程。Python 是通過引用計數和一個能夠檢測和打破迴圈引用的迴圈垃圾回收器來執行垃圾回收的。可以使用 gc 模組來控制垃圾回收器。

  • generator -- 生成器

    返回一個 generator iterator 的函式。它看起來很像普通函式,不同點在於其包含 yield 表示式以便產生一系列值供給 for-迴圈使用或是通過 next() 函式逐一獲取。通常是指生成器函式,但在某些情況下也可能是指 生成器迭代器。如果需要清楚表達具體含義,請使用全稱以避免歧義。

  • generator iterator -- 生成器迭代器

    generator 函式所建立的物件。每個 yield 會臨時暫停處理,記住當前位置執行狀態(包括區域性變數和掛起的 try 語句)。當該 生成器迭代器 恢復時,它會從離開位置繼續執行(這與每次呼叫都從新開始的普通函式差別很大)。

  • generator expression -- 生成器表示式

    返回一個迭代器的表示式。 它看起來很像普通表示式後面帶有定義了一個迴圈變數、範圍的 for 子句,以及一個可選的 if 子句。 以下複合表示式會為外層函式生成一系列值:>>>>>> sum(i*i for i in range(10)) # sum of squares 0, 1, 4, ... 81 285

  • generic function -- 泛型函式

    為不同的型別實現相同操作的多個函式所組成的函式。在呼叫時會由排程演算法來確定應該使用哪個實現。另請參見 single dispatch 術語表條目、functools.singledispatch() 裝飾器以及 PEP 443

  • GIL

    參見 global interpreter lock

  • global interpreter lock -- 全域性直譯器鎖

    CPython 直譯器所採用的一種機制,它確保同一時刻只有一個執行緒在執行 Python bytecode。此機制通過設定物件模型(包括 dict 等重要內建型別)針對併發訪問的隱式安全簡化了 CPython 實現。給整個直譯器加鎖使得直譯器多執行緒執行更方便,其代價則是犧牲了在多處理器上的並行性。不過,某些標準庫或第三方庫的擴充套件模組被設計為在執行計算密集型任務如壓縮或雜湊時釋放 GIL。此外,在執行 I/O 操作時也總是會釋放 GIL。建立一個(以更精細粒度來鎖定共享資料的)“自由執行緒”直譯器的努力從未獲得成功,因為這會犧牲在普通單處理器情況下的效能。據信克服這種效能問題的措施將導致實現變得更復雜,從而更難以維護。

  • hash-based pyc -- 基於雜湊的 pyc

    使用對應原始檔的雜湊值而非最後修改時間來確定其有效性的位元組碼快取檔案。 參見 已快取位元組碼的失效

  • hashable -- 可雜湊

    一個物件的雜湊值如果在其生命週期內絕不改變,就被稱為 可雜湊 (它需要具有 __hash__() 方法),並可以同其他物件進行比較(它需要具有 __eq__() 方法)。可雜湊物件必須具有相同的雜湊值比較結果才會相同。可雜湊性使得物件能夠作為字典鍵或集合成員使用,因為這些資料結構要在內部使用雜湊值。大多數 Python 中的不可變內建物件都是可雜湊的;可變容器(例如列表或字典)都不可雜湊;不可變容器(例如元組和 frozenset)僅當它們的元素均為可雜湊時才是可雜湊的。 使用者定義類的例項物件預設是可雜湊的。 它們在比較時一定不相同(除非是與自己比較),它們的雜湊值的生成是基於它們的 id()

  • IDLE

    Python 的 IDE,“整合開發與學習環境”的英文縮寫。是 Python 標準發行版附帶的基本編輯器和直譯器環境。

  • immutable -- 不可變

    具有固定值的物件。不可變物件包括數字、字串和元組。這樣的物件不能被改變。如果必須儲存一個不同的值,則必須建立新的物件。它們在需要常量雜湊值的地方起著重要作用,例如作為字典中的鍵。

  • import path -- 匯入路徑

    由多個位置(或 路徑條目)組成的列表,會被模組的 path based finder 用來查詢匯入目標。在匯入時,此位置列表通常來自 sys.path,但對次級包來說也可能來自上級包的 __path__ 屬性。

  • importing -- 匯入

    令一個模組中的 Python 程式碼能為另一個模組中的 Python 程式碼所使用的過程。

  • importer -- 匯入器

    查詢並載入模組的物件;此物件既屬於 finder 又屬於 loader

  • interactive -- 互動

    Python 帶有一個互動式直譯器,即你可以在直譯器提示符後輸入語句和表示式,立即執行並檢視其結果。只需不帶引數地啟動 python 命令(也可以在你的計算機開始選單中選擇相應選單項)。在測試新想法或檢驗模組和包的時候用這種方式會非常方便(請記得使用 help(x))。

  • interpreted -- 解釋型

    Python 一是種解釋型語言,與之相對的是編譯型語言,雖然兩者的區別由於位元組碼編譯器的存在而會有所模糊。這意味著原始檔可以直接執行而不必顯式地建立可執行檔案再執行。解釋型語言通常具有比編譯型語言更短的開發/除錯周期,但是其程式往往執行得更慢。參見 interactive

  • interpreter shutdown -- 直譯器關閉

    當被要求關閉時,Python 直譯器將進入一個特殊執行階段並逐步釋放所有已分配資源,例如模組和各種關鍵內部結構等。它還會多次呼叫 垃圾回收器。這會觸發使用者定義析構器或弱引用回撥中的程式碼執行。在關閉階段執行的程式碼可能會遇到各種異常,因為其所依賴的資源已不再有效(常見的例子有庫模組或警告機制等)。直譯器需要關閉的主要原因有 __main__ 模組或所執行的指令碼已完成執行。

  • iterable -- 可迭代物件

    能夠逐一返回其成員項的物件。 可迭代物件的例子包括所有序列型別 (例如 list, strtuple) 以及某些非序列型別例如 dict, 檔案物件 以及定義了 __iter__() 方法或是實現了 序列 語義的 __getitem__() 方法的任意自定義類物件。可迭代物件被可用於 for 迴圈以及許多其他需要一個序列的地方(zip()map() ...)。當一個可迭代物件作為引數傳給內建函式 iter() 時,它會返回該物件的迭代器。這種迭代器適用於對值集合的一次性遍歷。在使用可迭代物件時,你通常不需要呼叫 iter() 或者自己處理迭代器物件。for 語句會為你自動處理那些操作,建立一個臨時的未命名變數用來在迴圈期間儲存迭代器。參見 iteratorsequence 以及 generator

  • iterator -- 迭代器

    用來表示一連串資料流的物件。重複呼叫迭代器的 __next__() 方法(或將其傳給內建函式 next())將逐個返回流中的項。當沒有資料可用時則將引發 StopIteration 異常。到這時迭代器物件中的資料項已耗盡,繼續呼叫其 __next__() 方法只會再次引發 StopIteration 異常。迭代器必須具有 __iter__() 方法用來返回該迭代器物件自身,因此迭代器必定也是可迭代物件,可被用於其他可迭代物件適用的大部分場合。一個顯著的例外是那些會多次重複訪問迭代項的程式碼。容器物件(例如 list)在你每次向其傳入 iter() 函式或是在 for 迴圈中使用它時都會產生一個新的迭代器。如果在此情況下你嘗試用迭代器則會返回在之前迭代過程中被耗盡的同一迭代器物件,使其看起來就像是一個空容器。更多資訊可檢視 迭代器型別

  • key function -- 鍵函式

    鍵函式或稱整理函式,是能夠返回用於排序或排位的值的可呼叫物件。例如,locale.strxfrm() 可用於生成一個符合特定區域排序約定的排序鍵。Python 中有許多工具都允許用鍵函式來控制元素的排位或分組方式。其中包括 min(), max(), sorted(), list.sort(), heapq.merge(), heapq.nsmallest(), heapq.nlargest() 以及 itertools.groupby()。要建立一個鍵函式有多種方式。例如,str.lower() 方法可以用作忽略大小寫排序的鍵函式。另外,鍵函式也可通過 lambda 表示式來建立,例如 lambda r: (r[0], r[2])。還有 operator 模組提供了三個鍵函式構造器:attrgetter()itemgetter()methodcaller()。請檢視 如何排序 一節以獲取建立和使用鍵函式的示例。

  • keyword argument -- 關鍵字引數

    參見 argument

  • lambda

    由一個單獨 expression 構成的匿名行內函數,表示式會在呼叫時被求值。建立 lambda 函式的句法為 lambda [parameters]: expression

  • LBYL

    “先檢視後跳躍”的英文縮寫。這種程式碼編寫風格會在進行呼叫或查詢之前顯式地檢查前提條件。此風格與 EAFP 方式恰成對比,其特點是大量使用 if 語句。在多執行緒環境中,LBYL 方式會導致“檢視”和“跳躍”之間發生條件競爭風險。例如,以下程式碼 if key in mapping: return mapping[key] 可能由於在檢查操作之後其他執行緒從 mapping 中移除了 key 而出錯。這種問題可通過加鎖或使用 EAFP 方式來解決。

  • list -- 列表

    Python 內建的一種 sequence。雖然名為列表,但更類似於其他語言中的陣列而非連結列表,因為訪問元素的時間複雜度為 O(1)。

  • list comprehension -- 列表推導式

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

  • loader -- 載入器

    負責載入模組的物件。它必須定義名為 load_module() 的方法。載入器通常由一個 finder 返回。詳情參見 PEP 302,對於 abstract base class 可參見 importlib.abc.Loader

  • magic method -- 魔術方法

    special method 的非正式同義詞 。

  • mapping -- 對映

    一種支援任意鍵查詢並實現了 MappingMutableMapping 抽象基類 中所規定方法的容器物件。 此類物件的例子包括 dict, collections.defaultdict, collections.OrderedDict 以及 collections.Counter

  • meta path finder -- 元路徑查詢器

    sys.meta_path 的搜尋所返回的 finder。元路徑查詢器與 path entry finders 存在關聯但並不相同。請檢視 importlib.abc.MetaPathFinder 瞭解元路徑查詢器所實現的方法。

  • metaclass -- 元類

    一種用於建立類的類。類定義包含類名、類字典和基類列表。元類負責接受上述三個引數並建立相應的類。大部分物件導向的程式語言都會提供一個預設實現。Python 的特別之處在於可以建立自定義元類。大部分使用者永遠不需要這個工具,但當需要出現時,元類可提供強大而優雅的解決方案。它們已被用於記錄屬性訪問日誌、新增執行緒安全性、跟蹤物件建立、實現單例,以及其他許多工。更多詳情參見 元類

  • method -- 方法

    在類內部定義的函式。如果作為該類的例項的一個屬性來呼叫,方法將會獲取例項物件作為其第一個 argument (通常命名為 self)。參見 functionnested scope

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

    方法解析順序就是在查詢成員時搜尋全部基類所用的先後順序。請檢視 Python 2.3 方法解析順序 瞭解自 2.3 版起 Python 解析器所用相關演算法的詳情。

  • module -- 模組

    此物件是 Python 程式碼的一種組織單位。各模組具有獨立的名稱空間,可包含任意 Python 物件。模組可通過 importing 操作被載入到 Python 中。另見 package

  • module spec -- 模組規格

    一個名稱空間,其中包含用於載入模組的相關匯入資訊。是 importlib.machinery.ModuleSpec 的例項。

  • MRO

    參見 method resolution order

  • mutable -- 可變

    可變物件可以在其 id() 保持固定的情況下改變其取值。另請參見 immutable

  • named tuple -- 具名元組

    術語“具名元組”可用於任何繼承自元組,並且其中的可索引元素還能使用名稱屬性來訪問的型別或類。 這樣的型別或類還可能擁有其他特性。有些內建型別屬於具名元組,包括 time.localtime()os.stat() 的返回值。 另一個例子是 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 有些具名元組是內建型別(例如上面的例子)。 此外,具名元組還可通過常規類定義從 tuple 繼承並定義名稱欄位的方式來建立。 這樣的類可以手工編寫,或者使用工廠函式 collections.namedtuple() 建立。 後一種方式還會新增一些手工編寫或內建具名元組所沒有的額外方法。

  • namespace -- 名稱空間

    名稱空間是存放變數的場所。名稱空間有區域性、全域性和內建的,還有物件中的巢狀名稱空間(在方法之內)。名稱空間通過防止命名衝突來支援模組化。例如,函式 builtins.openos.open() 可通過各自的名稱空間來區分。名稱空間還通過明確哪個模組實現那個函式來幫助提高可讀性和可維護性。例如,random.seed()itertools.islice() 這種寫法明確了這些函式是由 randomitertools 模組分別實現的。

  • namespace package -- 名稱空間包

    PEP 420 所引入的一種僅被用作子包的容器的 package,名稱空間包可以沒有實體表示物,其描述方式與 regular package 不同,因為它們沒有 __init__.py 檔案。另可參見 module

  • nested scope -- 巢狀作用域

    在一個定義範圍內引用變數的能力。例如,在另一函式之內定義的函式可以引用前者的變數。請注意巢狀作用域預設只對引用有效而對賦值無效。區域性變數的讀寫都受限於最內層作用域。類似的,全域性變數的讀寫則作用於全域性名稱空間。通過 nonlocal 關鍵字可允許寫入外層作用域。

  • new-style class -- 新式類

    對於目前已被應於所有類物件的類形式的舊稱謂。在早先的 Python 版本中,只有新式類能夠使用 Python 新增的更靈活特性,例如 __slots__、描述符、特徵屬性、__getattribute__()、類方法和靜態方法等。

  • object -- 物件

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

  • package -- 包

    一種可包含子模組或遞迴地包含子包的 Python module。從技術上說,包是帶有 __path__ 屬性的 Python 模組。另參見 regular packagenamespace package

  • parameter -- 形參

    function (或方法)定義中的命名實體,它指定函式可以接受的一個 argument (或在某些情況下,多個實參)。有五種形參:positional-or-keyword:位置或關鍵字,指定一個可以作為 位置引數 傳入也可以作為 關鍵字引數 傳入的實參。這是預設的形參型別,例如下面的 foobar:def func(foo, bar=None): ... positional-only:僅限位置,指定一個只能通過位置傳入的引數。 僅限位置形參可通過在函式定義的形參列表中它們之後包含一個 / 字元來定義,例如下面的 posonly1posonly2:def func(posonly1, posonly2, /, positional_or_keyword): ... keyword-only:僅限關鍵字,指定一個只能通過關鍵字傳入的引數。僅限關鍵字形參可通過在函式定義的形參列表中包含單個可變位置形參或者在多個可變位置形參之前放一個 * 來定義,例如下面的 kw_only1kw_only2:def func(arg, *, kw_only1, kw_only2): ... var-positional:可變位置,指定可以提供由一個任意數量的位置引數構成的序列(附加在其他形參已接受的位置引數之後)。這種形參可通過在形參名稱前加綴 * 來定義,例如下面的 args:def func(*args, **kwargs): ... var-keyword:可變關鍵字,指定可以提供任意數量的關鍵字引數(附加在其他形參已接受的關鍵字引數之後)。這種形參可通過在形參名稱前加綴 ** 來定義,例如上面的 kwargs。形參可以同時指定可選和必選引數,也可以為某些可選引數指定預設值。另參見 argument 術語表條目、引數與形參的區別 中的常見問題、inspect.Parameter 類、函式定義 一節以及 PEP 362

  • path entry -- 路徑入口

    import path 中的一個單獨位置,會被 path based finder 用來查詢要匯入的模組。

  • path entry finder -- 路徑入口查詢器

    任一可呼叫物件使用 sys.path_hooks (即 path entry hook) 返回的 finder,此種物件能通過 path entry 來定位模組。請參看 importlib.abc.PathEntryFinder 以瞭解路徑入口查詢器所實現的各個方法。

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

    一種可呼叫物件,在知道如何查詢特定 path entry 中的模組的情況下能夠使用 sys.path_hook 列表返回一個 path entry finder

  • path based finder -- 基於路徑的查詢器

    預設的一種 元路徑查詢器,可在一個 import path 中查詢模組。

  • path-like object -- 路徑類物件

    代表一個檔案系統路徑的物件。類路徑物件可以是一個表示路徑的 str 或者 bytes 物件,還可以是一個實現了 os.PathLike 協議的物件。一個支援 os.PathLike 協議的物件可通過呼叫 os.fspath() 函式轉換為 str 或者 bytes 型別的檔案系統路徑;os.fsdecode()os.fsencode() 可被分別用來確保獲得 strbytes 型別的結果。此物件是由 PEP 519 引入的。

  • PEP

    “Python 增強提議”的英文縮寫。一個 PEP 就是一份設計文件,用來向 Python 社群提供資訊,或描述一個 Python 的新增特性及其進度或環境。PEP 應當提供精確的技術規格和所提議特性的原理說明。PEP 應被作為提出主要新特性建議、收集社群對特定問題反饋以及為必須加入 Python 的設計決策編寫文件的首選機制。PEP 的作者有責任在社群內部建立共識,並應將不同意見也記入文件。參見 PEP 1

  • portion -- 部分

    構成一個名稱空間包的單個目錄內檔案集合(也可能存放於一個 zip 檔案內),具體定義見 PEP 420

  • positional argument -- 位置引數

    參見 argument

  • provisional API -- 暫定 API

    暫定 API 是指被有意排除在標準庫的向後相容性保證之外的應用程式設計介面。雖然此類介面通常不會再有重大改變,但只要其被標記為暫定,就可能在核心開發者確定有必要的情況下進行向後不相容的更改(甚至包括移除該介面)。此種更改並不會隨意進行 -- 僅在 API 被加入之前未考慮到的嚴重基礎性缺陷被發現時才可能會這樣做。即便是對暫定 API 來說,向後不相容的更改也會被視為“最後的解決方案” —— 任何問題被確認時都會盡可能先嚐試找到一種向後相容的解決方案。這種處理過程允許標準庫持續不斷地演進,不至於被有問題的長期性設計缺陷所困。詳情見 PEP 411

  • provisional package -- 暫定包

    參見 provisional API

  • Python 3000

    Python 3.x 釋出路線的暱稱(這個名字在版本 3 的釋出還遙遙無期的時候就已出現了)。有時也被縮寫為“Py3k”。

  • Pythonic

    指一個思路或一段程式碼緊密遵循了 Python 語言最常用的風格和理念,而不是使用其他語言中通用的概念來實現程式碼。例如,Python 的常用風格是使用 for 語句迴圈來遍歷一個可迭代物件中的所有元素。許多其他語言沒有這樣的結構,因此不熟悉 Python 的人有時會選擇使用一個數字計數器:for i in range(len(food)): print(food[i]) 而相應的更簡潔更 Pythonic 的方法是這樣的:for piece in food: print(piece)

  • qualified name -- 限定名稱

    一個以點號分隔的名稱,顯示從模組的全域性作用域到該模組中定義的某個類、函式或方法的“路徑”,相關定義見 PEP 3155。對於最高層級的函式和類,限定名稱與物件名稱一致:>>>>>> class C: ... class D: ... def meth(self): ... pass ... >>> C.__qualname__ 'C' >>> C.D.__qualname__ 'C.D' >>> C.D.meth.__qualname__ 'C.D.meth' 當被用於引用模組時,完整限定名稱 意為標示該模組的以點號分隔的整個路徑,其中包含其所有的父包,例如 email.mime.text:>>>>>> import email.mime.text >>> email.mime.text.__name__ 'email.mime.text'

  • reference count -- 引用計數

    對特定物件的引用的數量。當一個物件的引用計數降為零時,所分配資源將被釋放。引用計數對 Python 程式碼來說通常是不可見的,但它是 CPython 實現的一個關鍵元素。sys 模組定義了一個 getrefcount() 函式,程式設計師可呼叫它來返回特定物件的引用計數。

  • regular package -- 常規包

    傳統型的 package,例如包含有一個 __init__.py 檔案的目錄。另參見 namespace package

  • slots

    一種寫在類內部的宣告,通過預先宣告例項屬性等物件並移除例項字典來節省記憶體。雖然這種技巧很流行,但想要用好卻並不容易,最好是隻保留在少數情況下采用,例如極耗記憶體的應用程式,並且其中包含大量例項。

  • sequence -- 序列

    一種 iterable,它支援通過 __getitem__() 特殊方法來使用整數索引進行高效的元素訪問,並定義了一個返回序列長度的 __len__() 方法。內建的序列型別有 liststrtuplebytes。注意雖然 dict 也支援 __getitem__()__len__(),但它被認為屬於對映而非序列,因為它查詢時使用任意的 immutable 鍵而非整數。collections.abc.Sequence 抽象基類定義了一個更豐富的介面,它在 __getitem__()__len__() 之外又新增了 count(), index(), __contains__()__reversed__()。 實現此擴充套件介面的型別可以使用 register() 來顯式地註冊。

  • set comprehension -- 集合推導式

    處理一個可迭代物件中的所有或部分元素並返回結果集合的一種緊湊寫法。 results = {c for c in 'abracadabra' if c not in 'abc'} 將生成字串集合 {'r', 'd'}。 參見 列表、集合與字典的顯示

  • single dispatch -- 單分派

    一種 generic function 分派形式,其實現是基於單個引數的型別來選擇的。

  • slice -- 切片

    通常只包含了特定 sequence 的一部分的物件。切片是通過使用下標標記來建立的,在 [] 中給出幾個以冒號分隔的數字,例如 variable_name[1:3:5]。方括號(下標)標記在內部使用 slice 物件。

  • special method -- 特殊方法

    一種由 Python 隱式呼叫的方法,用來對某個型別執行特定操作例如相加等等。這種方法的名稱的首尾都為雙下劃線。特殊方法的文件參見 特殊方法名稱

  • statement -- 語句

    語句是程式段(一個程式碼“塊”)的組成單位。一條語句可以是一個 expression 或某個帶有關鍵字的結構,例如 ifwhilefor

  • text encoding -- 文字編碼

    用於將Unicode字串編碼為位元組串的編碼器。

  • text file -- 文字檔案

    一種能夠讀寫 str 物件的 file object。通常一個文字檔案實際是訪問一個面向位元組的資料流並自動處理 text encoding。文字檔案的例子包括以文字模式('r''w')開啟的檔案、sys.stdinsys.stdout 以及 io.StringIO 的例項。另請參看 binary file 瞭解能夠讀寫 位元組類物件 的檔案物件。

  • triple-quoted string -- 三引號字串

    首尾各帶三個連續雙引號(")或者單引號(')的字串。它們在功能上與首尾各用一個引號標註的字串沒有什麼不同,但是有多種用處。它們允許你在字串內包含未經轉義的單引號和雙引號,並且可以跨越多行而無需使用連線符,在編寫文件字串時特別好用。

  • type -- 型別

    型別決定一個 Python 物件屬於什麼種類;每個物件都具有一種型別。要知道物件的型別,可以訪問它的 __class__ 屬性,或是通過 type(obj) 來獲取。

  • type alias -- 型別別名

    一個型別的同義詞,建立方式是把型別賦值給特定的識別符號。型別別名的作用是簡化 型別提示。例如:from typing import List, Tuple def remove_gray_shades( colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]: pass 可以這樣提高可讀性:from typing import List, Tuple Color = Tuple[int, int, int] def remove_gray_shades(colors: List[Color]) -> List[Color]: pass 參見 typingPEP 484,其中有對此功能的詳細描述。

  • type hint -- 型別提示

    annotation 為變數、類屬性、函式的形參或返回值指定預期的型別。型別提示屬於可選項,Python 不要求提供,但其可對靜態型別分析工具起作用,並可協助 IDE 實現程式碼補全與重構。全域性變數、類屬性和函式的型別提示可以使用 typing.get_type_hints() 來訪問,但區域性變數則不可以。參見 typingPEP 484,其中有對此功能的詳細描述。

  • universal newlines -- 通用換行

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

  • variable annotation -- 變數標註

    對變數或類屬性的 annotation。在標註變數或類屬性時,還可選擇為其賦值:class C: field: 'annotation' 變數標註通常被用作 型別提示:例如以下變數預期接受 int 型別的值:count: int = 0 變數標註語法的詳細解釋見 帶標註的賦值語句 一節。請參看 function annotationPEP 484PEP 526,其中對此功能有詳細描述。

  • virtual environment -- 虛擬環境

    一種採用協作式隔離的執行時環境,允許 Python 使用者和應用程式在安裝和升級 Python 分發包時不會干擾到同一系統上執行的其他 Python 應用程式的行為。另參見 venv

  • virtual machine -- 虛擬機器

    一臺完全通過軟體定義的計算機。Python 虛擬機器可執行位元組碼編譯器所生成的 bytecode

  • Zen of Python -- Python 之禪

    列出 Python 設計的原則與哲學,有助於理解與使用這種語言。檢視其具體內容可在互動模式提示符中輸入 "import this"。

相關文章