>>> sum(i*i for i in range(10)) # 平方之和 0, 1, 4, ... 81
generic function(泛型函式)一個由多個函式組成的函式,該函式會對不同的型別實作相同的運算。呼叫期間應該使用哪種實作,是由調度演算法 (dispatch algorithm) 來決定。
另請參閱 single dispatch(單一調度)術語表條目、functools.singledispatch()
裝飾器和 PEP 443。
generic type(泛型型別)一個能夠被參數化 (parameterized) 的 type(型別);通常是一個 容器型別,像是 list
和 dict
。它被用於型別提示和註釋。
詳情請參閱泛型別名型別、PEP 483、PEP 484、PEP 585 和 typing
模組。
GIL請參閱 global interpreter lock(全域直譯器鎖)。
global interpreter lock(全域直譯器鎖)CPython 直譯器所使用的機制,用以確保每次都只有一個執行緒能執行 Python 的 bytecode(位元組碼)。透過使物件模型(包括關鍵的內建型別,如 dict
)自動地避免並行存取 (concurrent access) 的危險,此機制可以簡化 CPython 的實作。鎖定整個直譯器,會使直譯器更容易成為多執行緒 (multi-threaded),但代價是會犧牲掉多處理器的機器能夠提供的一大部分平行性 (parallelism)。
然而,有些擴充模組,無論是標準的或是第三方的,它們被設計成在執行壓縮或雜湊等計算密集 (computationally intensive) 的任務時,可以解除 GIL。另外,在執行 I/O 時,GIL 總是會被解除。
從 Python 3.13 開始可以使用 --disable-gil
建置設定來停用 GIL。使用此選項建立 Python 後,必須使用 -X gil=0
來執行程式碼,或者設定 PYTHON_GIL=0
環境變數後再執行程式碼。此功能可以提高多執行緒應用程式的效能,並使多核心 CPU 的高效使用變得更加容易。有關更多詳細資訊,請參閱 PEP 703。
hash-based pyc(雜湊架構的 pyc)一個位元組碼 (bytecode) 暫存檔,它使用雜湊值而不是對應原始檔案的最後修改時間,來確定其有效性。請參閱Cached bytecode invalidation。
hashable(可雜湊的)如果一個物件有一個雜湊值,該值在其生命週期中永不改變(它需要一個 __hash__()
method),且可與其他物件互相比較(它需要一個 __eq__()
method),那麼它就是一個可雜湊物件。比較結果為相等的多個可雜湊物件,它們必須擁有相同的雜湊值。
可雜湊性 (hashability) 使一個物件可用作 dictionary(字典)的鍵和 set(集合)的成員,因為這些資料結構都在其內部使用了雜湊值。
大多數的 Python 不可變內建物件都是可雜湊的;可變的容器(例如 list 或 dictionary)並不是;而不可變的容器(例如 tuple(元組)和 frozenset),只有當它們的元素是可雜湊的,它們本身才是可雜湊的。若物件是使用者自定 class 的實例,則這些物件會被預設為可雜湊的。它們在互相比較時都是不相等的(除非它們與自己比較),而它們的雜湊值則是衍生自它們的 id()
。
IDLEPython 的 Integrated Development and Learning Environment(整合開發與學習環境)。IDLE --- Python 編輯器與 shell 是一個基本的編輯器和直譯器環境,它和 Python 的標準發行版本一起被提供。
immortal(不滅)不滅物件 (Immortal objects) 是 PEP 683 引入的 CPython 實作細節。
如果一個物件是不滅的,它的參照計數永遠不會被修改,因此在直譯器運行時它永遠不會被釋放。例如,True
和 None
在 CPython 中是不滅的。
immutable(不可變物件)一個具有固定值的物件。不可變物件包括數字、字串和 tuple(元組)。這類物件是不能被改變的。如果一個不同的值必須被儲存,則必須建立一個新的物件。它們在需要恆定雜湊值的地方,扮演重要的角色,例如 dictionary(字典)中的一個鍵。
import path(引入路徑)一個位置(或路徑項目)的列表,而那些位置就是在 import 模組時,會被 path based finder(基於路徑的尋檢器)搜尋模組的位置。在 import 期間,此位置列表通常是來自 sys.path
,但對於子套件 (subpackage) 而言,它也可能是來自父套件的 __path__
屬性。
importing(引入)一個過程。一個模組中的 Python 程式碼可以透過此過程,被另一個模組中的 Python 程式碼使用。
importer(引入器)一個能夠尋找及載入模組的物件;它既是 finder(尋檢器)也是 loader(載入器)物件。
interactive(互動的)Python 有一個互動式直譯器,這表示你可以在直譯器的提示字元輸入陳述式和運算式,立即執行它們並且看到它們的結果。只要啟動 python
,不需要任何引數(可能藉由從你的電腦的主選單選擇它)。這是測試新想法或檢查模組和包的非常強大的方法(請記住help(x))。更多互動式模式相關資訊請見 互動模式。
interpreted(直譯的)Python 是一種直譯語言,而不是編譯語言,不過這個區分可能有些模糊,因為有位元組碼 (bytecode) 編譯器的存在。這表示原始檔案可以直接被運行,而不需明確地建立另一個執行檔,然後再執行它。直譯語言通常比編譯語言有更短的開發/除錯週期,不過它們的程式通常也運行得較慢。另請參閱 interactive(互動的)。
interpreter shutdown(直譯器關閉)當 Python 直譯器被要求關閉時,它會進入一個特殊階段,在此它逐漸釋放所有被配置的資源,例如模組和各種關鍵內部結構。它也會多次呼叫垃圾回收器 (garbage collector)。這能夠觸發使用者自定的解構函式 (destructor) 或弱引用的回呼 (weakref callback),並執行其中的程式碼。在關閉階段被執行的程式碼會遇到各種例外,因為它所依賴的資源可能不再有作用了(常見的例子是函式庫模組或是警告機制)。
直譯器關閉的主要原因,是 __main__
模組或正被運行的腳本已經執行完成。
iterable(可疊代物件)一種能夠一次回傳一個其中成員的物件。可疊代物件的例子包括所有的序列型別(像是 list
、str
和 tuple
)和某些非序列型別,像是 dict
、檔案物件,以及你所定義的任何 class 物件,只要那些 class 有實作 sequence(序列)語意的 __iter__()
或是 __getitem__()
method,該物件就是可疊代物件。
可疊代物件可用於 for
迴圈和許多其他需要一個序列的地方 (zip()
、map()
...)。當一個可疊代物件作為引數被傳遞給內建函式 iter()
時,它會為該物件回傳一個疊代器。此疊代器適用於針對一組值進行一遍 (one pass) 運算。使用疊代器時,通常不一定要呼叫 iter()
或自行處理疊代器物件。for
陳述式會自動地為你處理這些事,它會建立一個暫時性的未命名變數,用於在迴圈期間保有該疊代器。另請參閱 iterator(疊代器)、sequence(序列)和 generator(產生器)。
iterator(疊代器)一個表示資料流的物件。重複地呼叫疊代器的 __next__()
method(或是將它傳遞給內建函式 next()
)會依序回傳資料流中的各項目。當不再有資料時,則會引發 StopIteration
例外。此時,該疊代器物件已被用盡,而任何對其 __next__()
method 的進一步呼叫,都只會再次引發 StopIteration
。疊代器必須有一個 __iter__()
method,它會回傳疊代器物件本身,所以每個疊代器也都是可疊代物件,且可以用於大多數適用其他可疊代物件的場合。一個明顯的例外,是嘗試多遍疊代 (multiple iteration passes) 的程式碼。一個容器物件(像是 list
)在每次你將它傳遞給 iter()
函式或在 for
迴圈中使用它時,都會產生一個全新的疊代器。使用疊代器嘗試此事(多遍疊代)時,只會回傳在前一遍疊代中被用過的、同一個已被用盡的疊代器物件,使其看起來就像一個空的容器。
在疊代器型別文中可以找到更多資訊。
CPython 並不是始終如一地都會檢查「疊代器有定義 __iter__()
」這個規定。另請注意,free-threading(自由執行緒)CPython 不保證疊代器操作的執行緒安全。
key function(鍵函式)鍵函式或理序函式 (collation function) 是一個可呼叫 (callable) 函式,它會回傳一個用於排序 (sorting) 或定序 (ordering) 的值。例如,locale.strxfrm()
被用來產生一個了解區域特定排序慣例的排序鍵。
Python 中的許多工具,都接受以鍵函式來控制元素被定序或分組的方式。它們包括 min()
、max()
、sorted()
、list.sort()
、heapq.merge()
、heapq.nsmallest()
、heapq.nlargest()
和 itertools.groupby()
。
有幾種方法可以建立一個鍵函式。例如,str.lower()
method 可以作為不分大小寫排序的鍵函式。或者,一個鍵函式也可以從 lambda
運算式被建造,例如 lambda r: (r[0], r[2])
。另外,operator.attrgetter()
、operator.itemgetter()
和 operator.methodcaller()
為三個鍵函式的建構函式 (constructor)。關於如何建立和使用鍵函式的範例,請參閱如何排序。
keyword argument(關鍵字引數)請參閱 argument(引數)。
lambda由單一 expression(運算式)所組成的一個匿名行內函式 (inline function),於該函式被呼叫時求值。建立 lambda 函式的語法是 lambda [parameters]: expression
LBYLLook before you leap.(三思而後行。)這種編碼風格會在進行呼叫或查找之前,明確地測試先決條件。這種風格與 EAFP 方式形成對比,且它的特色是會有許多 if
陳述式的存在。
在一個多執行緒環境中,LBYL 方式有在「三思」和「後行」之間引入了競爭條件 (race condition) 的風險。例如以下程式碼 if key in mapping: return mapping[key]
,如果另一個執行緒在測試之後但在查找之前,從 mapping 中移除了 key,則該程式碼就會失效。這個問題可以用鎖 (lock) 或使用 EAFP 編碼方式來解決。
lexical analyzerFormal name for the tokenizer; see token.
list(串列)一個 Python 內建的 sequence (序列)。儘管它的名字是 list,它其實更類似其他語言中的一個陣列 (array) 而較不像一個鏈結串列 (linked list),因為存取元素的時間複雜度是 O(1)。
list comprehension(串列綜合運算)一種用來處理一個序列中的全部或部分元素,並將處理結果以一個 list 回傳的簡要方法。result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0]
會產生一個字串 list,其中包含 0 到 255 範圍內,所有偶數的十六進位數 (0x..)。if
子句是選擇性的。如果省略它,則 range(256)
中的所有元素都會被處理。
loader(載入器)一個能夠載入模組的物件。它必須定義 exec_module()
和 create_module()
方法以實作 Loader
介面。載入器通常是被 finder(尋檢器)回傳。更多細節請參閱:
尋檢器 (Finder) 與載入器 (Loader)
importlib.abc.Loader
PEP 302
locale encoding(區域編碼)在 Unix 上,它是 LC_CTYPE 區域設定的編碼。它可以用 locale.setlocale(locale.LC_CTYPE, new_locale)
來設定。
在 Windows 上,它是 ANSI 代碼頁(code page,例如 "cp1252"
)。
在 Android 和 VxWorks 上,Python 使用 "utf-8"
作為區域編碼。
locale.getencoding()
可以用來取得區域編碼。
也請參考 filesystem encoding and error handler。
magic method(魔術方法)special method(特殊方法)的一個非正式同義詞。
mapping(對映)一個容器物件,它支援任意鍵的查找,且能實作 abstract base classes(抽象基底類別)中,collections.abc.Mapping
或 collections.abc.MutableMapping
所指定的 method。範例包括 dict
、collections.defaultdict
、collections.OrderedDict
和 collections.Counter
。
meta path finder(元路徑尋檢器)一種經由搜尋 sys.meta_path
而回傳的 finder(尋檢器)。元路徑尋檢器與路徑項目尋檢器 (path entry finder) 相關但是不同。
關於元路徑尋檢器實作的 method,請參閱 importlib.abc.MetaPathFinder
。
metaclass(元類別)一種 class 的 class。Class 定義過程會建立一個 class 名稱、一個 class dictionary(字典),以及一個 base class(基底類別)的列表。Metaclass 負責接受這三個引數,並建立該 class。大多數的物件導向程式語言會提供一個預設的實作。Python 的特別之處在於它能夠建立自訂的 metaclass。大部分的使用者從未需要此工具,但是當需要時,metaclass 可以提供強大且優雅的解決方案。它們已被用於記錄屬性存取、增加執行緒安全性、追蹤物件建立、實作單例模式 (singleton),以及許多其他的任務。
更多資訊可以在Metaclasses章節中找到。
method(方法)一個在 class 本體內被定義的函式。如果 method 作為其 class 實例的一個屬性被呼叫,則它將會得到該實例物件成為它的第一個 argument(引數)(此引數通常被稱為 self
)。請參閱 function
(函式)和 nested scope(巢狀作用域)。
method resolution order(方法解析順序)方法解析順序是在查找某個成員的過程中,base class(基底類別)被搜尋的順序。關於 Python 自 2.3 版直譯器所使用的演算法細節,請參閱 The Python 2.3 Method Resolution Order。
module(模組)一個擔任 Python 程式碼的組織單位 (organizational unit) 的物件。模組有一個命名空間,它包含任意的 Python 物件。模組是藉由 importing 的過程,被載入至 Python。
另請參閱 package(套件)。
module spec(模組規格)一個命名空間,它包含用於載入模組的 import 相關資訊。它是 importlib.machinery.ModuleSpec
的一個實例。
另請參閱 模組規格。
MRO請參閱 method resolution order(方法解析順序)。
mutable(可變物件)可變物件可以改變它們的值,但維持它們的 id()
。另請參閱 immutable(不可變物件)。
named tuple(附名元組)術語「named tuple(附名元組)」是指從 tuple 繼承的任何型別或 class,且它的可索引 (indexable) 元素也可以用附名屬性來存取。這些型別或 class 也可以具有其他的特性。
有些內建型別是 named tuple,包括由 time.localtime()
和 os.stat()
回傳的值。另一個例子是 sys.float_info
:
>>> sys.float_info[1] # indexed access
>>> sys.float_info.max_exp # named field access
>>> isinstance(sys.float_info, tuple) # kind of tuple
有些 named tuple 是內建型別(如上例)。或者,一個 named tuple 也可以從一個正規的 class 定義來建立,只要該 class 是繼承自 tuple
,且定義了附名欄位 (named field) 即可。這類的 class 可以手工編寫、可以繼承自 typing.NamedTuple
來建立,也可以使用工廠函式 (factory function) collections.namedtuple()
來建立。後者技術也增加了一些額外的 method,這些 method 可能是在手寫或內建的 named tuple 中,無法找到的。
namespace(命名空間)變數被儲存的地方。命名空間是以 dictionary(字典)被實作。有區域的、全域的及內建的命名空間,而在物件中(在 method 中)也有巢狀的命名空間。命名空間藉由防止命名衝突,來支援模組化。例如,函式 builtins.open
和 os.open()
是透過它們的命名空間來區分彼此。命名空間也藉由明確地區分是哪個模組在實作一個函式,來增進可讀性及可維護性。例如,寫出 random.seed()
或 itertools.islice()
明確地表示,這些函式分別是由 random
和 itertools
模組在實作。
namespace package(命名空間套件)一個 package(套件),它只能作為子套件 (subpackage) 的一個容器。命名空間套件可能沒有實體的表示法,而且具體來說它們不像是一個 regular package(正規套件),因為它們並沒有 __init__.py
這個檔案。
命名空間套件允許數個可獨立安裝的套件擁有一個共同的父套件。除此之外,建議使用 regular package。
更多資訊,請參閱 PEP 420 和 命名空間套件。
另請參閱 module(模組)。
nested scope(巢狀作用域)能夠參照外層定義 (enclosing definition) 中的變數的能力。舉例來說,一個函式如果是在另一個函式中被定義,則它便能夠參照外層函式中的變數。請注意,在預設情況下,巢狀作用域僅適用於參照,而無法用於賦值。區域變數能在最內層作用域中讀取及寫入。同樣地,全域變數是在全域命名空間中讀取及寫入。nonlocal
容許對外層作用域進行寫入。
new-style class(新式類別)一個舊名,它是指現在所有的 class 物件所使用的 class 風格。在早期的 Python 版本中,只有新式 class 才能使用 Python 較新的、多樣的功能,像是 __slots__
、描述器 (descriptor)、屬性 (property)、__getattribute__()
、class method(類別方法)和 static method(靜態方法)。
object(物件)具有狀態(屬性或值)及被定義的行為(method)的任何資料。它也是任何 new-style class(新式類別)的最終 base class(基底類別)。
optimized scope(最佳化作用域)A scope where target local variable names are reliably known to the
compiler when the code is compiled, allowing optimization of read and
write access to these names. The local namespaces for functions,
generators, coroutines, comprehensions, and generator expressions are
optimized in this fashion. Note: most interpreter optimizations are
applied to all scopes, only those relying on a known set of local
and nonlocal variable names are restricted to optimized scopes.
package(套件)一個 Python 的 module(模組),它可以包含子模組 (submodule) 或是遞迴的子套件 (subpackage)。技術上而言,套件就是具有 __path__
屬性的一個 Python 模組。
另請參閱 regular package(正規套件)和 namespace package(命名空間套件)。
parameter(參數)在 function(函式)或 method 定義中的一個命名實體 (named entity),它指明該函式能夠接受的一個 argument(引數),或在某些情況下指示多個引數。共有有五種不同的參數類型:
positional-or-keyword(位置或關鍵字):指明一個可以按照位置或是作為關鍵字引數被傳遞的引數。這是參數的預設類型,例如以下的 foo 和 bar:
def func(foo, bar=None): ...
positional-only(僅限位置):指明一個只能按照位置被提供的引數。在函式定義的參數列表中包含一個 /
字元,就可以在該字元前面定義僅限位置參數,例如以下的 posonly1 和 posonly2:
def func(posonly1, posonly2, /, positional_or_keyword): ...
keyword-only(僅限關鍵字):指明一個只能以關鍵字被提供的引數。在函式定義的參數列表中,包含一個任意數量位置參數 (var-positional parameter) 或是單純的 *
字元,就可以在其後方定義僅限關鍵字參數,例如以下的 kw_only1 和 kw_only2:
def func(arg, *, kw_only1, kw_only2): ...
var-positional(任意數量位置):指明一串能以任意序列被提供的位置引數(在已被其他參數接受的任何位置引數之外)。這類參數是透過在其參數名稱字首加上 *
來定義的,例如以下的 args:
def func(*args, **kwargs): ...
var-keyword(任意數量關鍵字):指明可被提供的任意數量關鍵字引數(在已被其他參數接受的任何關鍵字引數之外)。這類參數是透過在其參數名稱字首加上 **
來定義的,例如上面範例中的 kwargs。
參數可以指明引數是選擇性的或必需的,也可以為一些選擇性的引數指定預設值。
另請參閱術語表的 argument(引數)條目、常見問題中的引數和參數之間的差異、inspect.Parameter
class、函式定義章節,以及 PEP 362。
path entry(路徑項目)在 import path(引入路徑)中的一個位置,而 path based finder (基於路徑的尋檢器)會參考該位置來尋找要 import 的模組。
path entry finder(路徑項目尋檢器)被 sys.path_hooks
中的一個可呼叫物件 (callable)(意即一個 path entry hook)所回傳的一種 finder,它知道如何以一個 path entry定位模組。
關於路徑項目尋檢器實作的 method,請參閱 importlib.abc.PathEntryFinder
。
path entry hook(路徑項目鉤)在 sys.path_hooks
列表中的一個可呼叫物件 (callable),若它知道如何在一個特定的 path entry 中尋找模組,則會回傳一個 path entry finder(路徑項目尋檢器)。
path based finder(基於路徑的尋檢器)預設的元路徑尋檢器 (meta path finder) 之一,它會在一個 import path 中搜尋模組。
path-like object(類路徑物件)一個表示檔案系統路徑的物件。類路徑物件可以是一個表示路徑的 str
或 bytes
物件,或是一個實作 os.PathLike
協定的物件。透過呼叫 os.fspath()
函式,一個支援 os.PathLike
協定的物件可以被轉換為 str
或 bytes
檔案系統路徑;而 os.fsdecode()
及 os.fsencode()
則分別可用於確保 str
及 bytes
的結果。由 PEP 519 引入。
PEPPython Enhancement Proposal(Python 增強提案)。PEP 是一份設計說明文件,它能為 Python 社群提供資訊,或是描述 Python 的一個新功能或該功能的程序和環境。PEP 應該要提供簡潔的技術規範以及被提案功能的運作原理。
PEP 的存在目的,是要成為重大新功能的提案、社群中關於某個問題的意見收集,以及已納入 Python 的設計決策的記錄,這些過程的主要機制。PEP 的作者要負責在社群內建立共識並記錄反對意見。
請參閱 PEP 1。
portion(部分)在單一目錄中的一組檔案(也可能儲存在一個 zip 檔中),這些檔案能對一個命名空間套件 (namespace package) 有所貢獻,如同 PEP 420 中的定義。
positional argument(位置引數)請參閱 argument(引數)。
provisional API(暫行 API)暫行 API 是指,從標準函式庫的向後相容性 (backwards compatibility) 保證中,故意被排除的 API。雖然此類介面,只要它們被標示為暫行的,理論上並不會有重大的變更,但如果核心開發人員認為有必要,也可能會出現向後不相容的變更(甚至包括移除該介面)。這種變更並不會無端地產生——只有 API 被納入之前未察覺的嚴重基本缺陷被揭露時,它們才會發生。
即使對於暫行 API,向後不相容的變更也會被視為「最後的解決方案」——對於任何被發現的問題,仍然會盡可能找出一個向後相容的解決方案。
這個過程使得標準函式庫能隨著時間不斷進化,而避免耗費過長的時間去鎖定有問題的設計錯誤。請參閱 PEP 411 了解更多細節。
provisional package(暫行套件)請參閱 provisional API(暫行 API)。
Python 3000Python 3.x 系列版本的暱稱(很久以前創造的,當時第 3 版的發布是在遙遠的未來。)也可以縮寫為「Py3k」。
Pythonic(Python 風格的)一個想法或一段程式碼,它應用了 Python 語言最常見的慣用語,而不是使用其他語言常見的概念來實作程式碼。例如,Python 中常見的一種習慣用法,是使用一個 for
陳述式,對一個可疊代物件的所有元素進行迴圈。許多其他語言並沒有這種類型的架構,所以不熟悉 Python 的人有時會使用一個數值計數器來代替:
for i in range(len(food)):
print(food[i])
相較之下,以下方法更簡潔、更具有 Python 風格:
for piece in food:
print(piece)
qualified name(限定名稱)一個「點分隔名稱」,它顯示從一個模組的全域作用域到該模組中定義的 class、函式或 method 的「路徑」,如 PEP 3155 中的定義。對於頂層的函式和 class 而言,限定名稱與其物件名稱相同:
>>> class C:
... class D:
... def meth(self):
... pass
>>> C.__qualname__
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__qualname__
'C.D.meth'
當用於引用模組時,完全限定名稱 (fully qualified name) 是表示該模組的完整點分隔路徑,包括任何的父套件,例如 email.mime.text
:
>>> import email.mime.text
>>> email.mime.text.__name__
'email.mime.text'
reference count(參照計數)對於一個物件的參照次數。當一個物件的參照計數下降到零時,它會被解除配置 (deallocated)。有些物件是「不滅的 (immortal)」並擁有不會被改變的參照計數,也因此永遠不會被解除配置。參照計數通常在 Python 程式碼中看不到,但它卻是 CPython 實作的一個關鍵元素。程式設計師可以呼叫 getrefcount()
函式來回傳一個特定物件的參照計數。
regular package(正規套件)一個傳統的 package(套件),例如一個包含 __init__.py
檔案的目錄。
另請參閱 namespace package(命名空間套件)。
REPL「read-eval-print 迴圈 (read–eval–print loop)」的縮寫,是互動式直譯器 shell 的另一個名稱。
__slots__在 class 內部的一個宣告,它藉由預先宣告實例屬性的空間,以及消除實例 dictionary(字典),來節省記憶體。雖然該技術很普遍,但它有點難以正確地使用,最好保留給那種在一個記憶體關鍵 (memory-critical) 的應用程式中存在大量實例的罕見情況。
sequence(序列)一個 iterable(可疊代物件),它透過 __getitem__()
special method(特殊方法),使用整數索引來支援高效率的元素存取,並定義了一個 __len__()
method 來回傳該序列的長度。一些內建序列型別包括 list
、str
、tuple
和 bytes
。請注意,雖然 dict
也支援 __getitem__()
和 __len__()
,但它被視為對映 (mapping) 而不是序列,因為其查找方式是使用任意的 hashable 鍵,而不是整數。
抽象基底類別 (abstract base class) collections.abc.Sequence
定義了一個更加豐富的介面,並不僅止於 __getitem__()
和 __len__()
,還增加了 count()
、index()
、__contains__()
和 __reversed__()
。實作此擴充介面的型別,可以使用 register()
被明確地註冊。更多關於序列方法的文件,請見常見序列操作。
set comprehension(集合綜合運算)一種緊密的方法,用來處理一個可疊代物件中的全部或部分元素,並將處理結果以一個 set 回傳。results = {c for c in 'abracadabra' if c not in 'abc'}
會產生一個字串 set:{'r', 'd'}
。請參閱Displays for lists, sets and dictionaries。
single dispatch(單一調度)generic function(泛型函式)調度的一種形式,在此,實作的選擇是基於單一引數的型別。
slice(切片)一個物件,它通常包含一段 sequence(序列)的某一部分。建立一段切片的方法是使用下標符號 (subscript notation) []
,若要給出多個數字,則在數字之間使用冒號,例如 variable_name[1:3:5]
。在括號(下標)符號的內部,會使用 slice
物件。
soft deprecated(軟性棄用)被軟性棄用的 API 代表不應再用於新程式碼中,但在現有程式碼中繼續使用它仍會是安全的。API 仍會以文件記錄並會被測試,但不會被繼續改進。
與正常棄用不同,軟性棄用沒有刪除 API 的規劃,也不會發出警告。
請參閱 PEP 387:軟性棄用。
special method(特殊方法)一種會被 Python 自動呼叫的 method,用於對某種型別執行某種運算,例如加法。這種 method 的名稱會在開頭和結尾有兩個下底線。Special method 在Special method names中有詳細說明。
statement(陳述式)陳述式是一個套組(suite,一個程式碼「區塊」)中的一部分。陳述式可以是一個 expression(運算式),或是含有關鍵字(例如 if
、while
或 for
)的多種結構之一。
static type checker(靜態型別檢查器)會讀取 Python 程式碼並分析的外部工具,能夠找出錯誤,像是使用了不正確的型別。另請參閱型別提示 (type hints) 以及 typing
模組。
strong reference(強參照)在 Python 的 C API 中,強參照是對物件的參照,該物件為持有該參照的程式碼所擁有。建立參照時透過呼叫 Py_INCREF()
來獲得強參照、刪除參照時透過 Py_DECREF()
釋放強參照。
Py_NewRef()
函式可用於建立一個對物件的強參照。通常,在退出強參照的作用域之前,必須在該強參照上呼叫 Py_DECREF()
函式,以避免洩漏一個參照。
另請參閱 borrowed reference(借用參照)。
text encoding(文字編碼)Python 中的字串是一個 Unicode 碼點 (code point) 的序列(範圍在 U+0000
-- U+10FFFF
之間)。若要儲存或傳送一個字串,它必須被序列化為一個位元組序列。
將一個字串序列化為位元組序列,稱為「編碼」,而從位元組序列重新建立該字串則稱為「解碼 (decoding)」。
有多種不同的文字序列化編解碼器 (codecs),它們被統稱為「文字編碼」。
text file(文字檔案)一個能夠讀取和寫入 str
物件的一個 file object(檔案物件)。通常,文字檔案實際上是存取位元組導向的資料流 (byte-oriented datastream) 並會自動處理 text encoding(文字編碼)。文字檔案的例子有:以文字模式('r'
或 'w'
)開啟的檔案、sys.stdin
、sys.stdout
以及 io.StringIO
的實例。
另請參閱 binary file(二進位檔案),它是一個能夠讀取和寫入類位元組串物件 (bytes-like object) 的檔案物件。
tokenA small unit of source code, generated by the
lexical analyzer (also called the tokenizer).
Names, numbers, strings, operators,
newlines and similar are represented by tokens.
The tokenize
module exposes Python's lexical analyzer.
The token
module contains information on the various types
of tokens.
triple-quoted string(三引號內字串)由三個雙引號 (") 或單引號 (') 的作為邊界的一個字串。雖然它們並沒有提供異於單引號字串的任何額外功能,但基於許多原因,它們仍是很有用的。它們讓你可以在字串中包含未跳脫 (unescaped) 的單引號和雙引號,而且它們不需使用連續字元 (continuation character) 就可以跨越多行,這使得它們在編寫說明字串時特別有用。
type(型別)一個 Python 物件的型別決定了它是什麼類型的物件;每個物件都有一個型別。一個物件的型別可以用它的 __class__
屬性來存取,或以 type(obj)
來檢索。
type alias(型別別名)一個型別的同義詞,透過將型別指定給一個識別符 (identifier) 來建立。
型別別名對於簡化型別提示 (type hint) 很有用。例如:
def remove_gray_shades(
colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
可以寫成這樣,更具有可讀性:
Color = tuple[int, int, int]
def remove_gray_shades(colors: list[Color]) -> list[Color]:
請參閱 typing
和 PEP 484,有此功能的描述。
type hint(型別提示)一種 annotation(註釋),它指定一個變數、一個 class 屬性或一個函式的參數或回傳值的預期型別。
型別提示是選擇性的,而不是被 Python 強制的,但它們對靜態型別檢查器 (static type checkers)很有用,並能協助 IDE 完成程式碼的補全 (completion) 和重構 (refactoring)。
全域變數、class 屬性和函式(不含區域變數)的型別提示,都可以使用 typing.get_type_hints()
來存取。
請參閱 typing
和 PEP 484,有此功能的描述。
universal newlines(通用換行字元)一種解譯文字流 (text stream) 的方式,會將以下所有的情況識別為一行的結束:Unix 行尾慣例 '\n'
、Windows 慣例 '\r\n'
和舊的 Macintosh 慣例 '\r'
。請參閱 PEP 278 和 PEP 3116,以及用於 bytes.splitlines()
的附加用途。
variable annotation(變數註釋)一個變數或 class 屬性的 annotation(註釋)。
註釋變數或 class 屬性時,賦值是選擇性的:
class C:
field: 'annotation'
變數註釋通常用於型別提示 (type hint):例如,這個變數預期會取得 int
(整數)值:
count: int = 0
變數註釋的語法在註釋賦值陳述式章節有詳細的解釋。
請參閱 function annotation(函式註釋)、PEP 484 和 PEP 526,皆有此功能的描述。關於註釋的最佳實踐方法,另請參閱 註釋 (annotation) 最佳實踐。
virtual environment(虛擬環境)一個協作隔離 (cooperatively isolated) 的執行環境,能讓 Python 的使用者和應用程式得以安裝和升級 Python 發佈套件,而不會對同一個系統上運行的其他 Python 應用程式的行為產生干擾。
另請參閱 venv
。
virtual machine(虛擬機器)一部完全由軟體所定義的電腦 (computer)。Python 的虛擬機器會執行由 bytecode(位元組碼)編譯器所發出的位元組碼。
Zen of Python(Python 之禪)Python 設計原則與哲學的列表,其內容有助於理解和使用此語言。此列表可以透過在互動式提式字元後輸入「import this
」來找到它。
2001-2025, Python Software Foundation.
This page is licensed under the Python Software Foundation License Version 2.
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
See History and License for more information.