內建函式

Python 直譯器有內建多個可隨時使用的函式和型別。以下按照英文字母排序列出。

內建函式

abs(number, /)

回傳一個數的絕對值,引數可以是整數、浮點數或有實現 __abs__() 的物件。如果引數是一個複數,回傳它的純量(大小)。

aiter(async_iterable, /)

回傳 非同步疊代器 做為 非同步可疊代物件。相當於呼叫 x.__aiter__()。

注意:與 iter() 不同,aiter() 沒有兩個引數的變體。

在 3.10 版被加入.

all(iterable, /)

如果 iterable 的所有元素皆為真(或 iterable 為空)則回傳 True。等價於:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
awaitable anext(async_iterator, /)
awaitable anext(async_iterator, default, /)

當進入 await 時,從給定的 asynchronous iterator 中回傳下一個項目(item),疊代完畢則回傳 default

這是內建函式 next() 的非同步版本,其行為類似於:

呼叫 async_iterator__anext__() 方法,回傳 awaitable。等待回傳疊代器的下一個值。如果指定 default,當疊代器結束時會回傳該值,否則會引發 StopAsyncIteration

在 3.10 版被加入.

any(iterable, /)

如果 iterable 的任一元素為真,回傳 True。如果 iterable 是空的,則回傳 False。等價於:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
ascii(object, /)

就像函式 repr(),回傳一個表示物件的字串,但是 repr() 回傳的字串中非 ASCII 編碼的字元會被跳脫 (escape),像是 \x\u\U。這個函式生成的字串和 Python 2 的 repr() 回傳的結果相似。

bin(integer, /)

將一個整數轉變為一個前綴為 "0b" 的二進位制字串。結果是一個有效的 Python 運算式。如果 integer 不是 Python 的 int 物件,那它需要定義 __index__() method 回傳一個整數。舉例來說:

>>> bin(3)
'0b11'
>>> bin(-10)
'-0b1010'

如果不一定需要 "0b" 前綴,還可以使用如下的方法。

>>> format(14, '#b'), format(14, 'b')
('0b1110', '1110')
>>> f'{14:#b}', f'{14:b}'
('0b1110', '1110')

也請參閱 enum.bin() 以二補數表示負數。

可參考 format() 取得更多資訊。

class bool(object=False, /)

回傳一個布林值,即 True 或者 False。引數會使用標準的真值測試程序來轉換。如果引數為假或者被省略,則回傳 False;其他情況回傳 Truebool class(類別)是 int 的 subclass(子類別)(參見 數值型別 --- int、float、complex),其他 class 不能繼承自它。它只有 FalseTrue 兩個實例(參見 Boolean 型別 - bool)。

在 3.7 版的變更: 現在為僅限位置參數。

breakpoint(*args, **kws)

這個函式將呼叫 sys.breakpointhook() 函式,並將 argskws 傳遞給它。這將有效地讓你在特定的呼叫點進入除錯器。預設情況下,sys.breakpointhook() 呼叫 pdb.set_trace() 不須帶任何引數。這樣的設計是為了方便使用者,讓他們不需要額外地導入 pdb 模組或輸入太多程式就可以進入除錯器。然而,可以將 sys.breakpointhook() 設置為其他函式,並且 breakpoint() 將自動呼叫該函式,讓你進入所選擇的除錯器。如果無法存取 sys.breakpointhook() 這個函式,則此函式將引發 RuntimeError

預設情況下,breakpoint() 的行為可以透過 PYTHONBREAKPOINT 環境變數來更改。有關使用詳情,請參考 sys.breakpointhook()

請注意,如果 sys.breakpointhook() 被替換了,則無法保證此功能。

引發一個附帶引數 breakpointhook稽核事件 builtins.breakpoint

在 3.7 版被加入.

class bytearray(source=b'')
class bytearray(source, encoding, errors='strict')

回傳一個新的 bytes 陣列。bytearray class 是一個可變的整數序列,包含範圍為 0 <= x < 256 的整數。它有可變序列大部分常見的 method(如在 可變序列型別 中所述),同時也有 bytes 型別大部分的 method,參見 Bytes 和 Bytearray 的操作

選擇性參數 source 可以被用來以不同的方式初始化陣列:

  • 如果是一個 string,你必須提供 encoding 參數(以及選擇性地提供 errors );bytearray() 會使用 str.encode() method 來將 string 轉變成 bytes。

  • 如果是一個 integer,陣列則會有該數值的長度,並以 null bytes 來當作初始值。

  • 如果是一個符合 buffer 介面的物件,該物件的唯讀 buffer 會被用來初始化 bytes 陣列。

  • 如果是一個 iterable,它的元素必須是範圍為 0 <= x < 256 的整數,並且會被用作陣列的初始值。

如果沒有引數,則建立長度為 0 的陣列。

可參考 Binary Sequence Types --- bytes, bytearray, memoryviewBytearray 物件

class bytes(source=b'')
class bytes(source, encoding, errors='strict')

回傳一個新的 "bytes" 物件,會是一個元素是範圍為 0 <= x < 256 整數的不可變序列。bytesbytearray 的不可變版本 — 它的同樣具備不改變物件的 method,也有相同的索引和切片操作。

因此,建構函式的引數和 bytearray() 相同。

Bytes 物件還可以用文字建立,參見 String and Bytes literals

可參考 Binary Sequence Types --- bytes, bytearray, memoryviewBytes ObjectsBytes 和 Bytearray 的操作

callable(object, /)

如果引數 object 是可呼叫的,回傳 True,否則回傳 False。如果回傳 True,呼叫仍可能會失敗;但如果回傳 False,則呼叫 object 肯定會失敗。注意 class 是可呼叫的(呼叫 class 會回傳一個新的實例);如果實例的 class 有定義 __call__() method,則它是可呼叫的。

在 3.2 版被加入: 這個函式一開始在 Python 3.0 被移除,但在 Python 3.2 又被重新加入。

chr(codepoint, /)

回傳代表有特定 Unicode 編碼位置字元的字串。例如,chr(97) 回傳字串 'a',而 chr(8364) 回傳字串 '€'。這是 ord() 的逆函式。

引數的有效範圍是 0 到 1,114,111(16 進制表示為 0x10FFFF)。如果它超過這個範圍,會引發 ValueError

@classmethod

把一個 method 封裝成 class method(類別方法)。

一個 class method 把自己的 class 作為第一個引數,就像一個實例 method 把實例自己作為第一個引數。請用以下慣例來宣告 class method:

class C:
    @classmethod
    def f(cls, arg1, arg2): ...

@classmethod 語法是一個函式 decorator — 參見 函式定義 中關於函式定義的詳細介紹。

一個 class method 可以在 class(如 C.f())或實例(如 C().f())上呼叫。實例除了它的 class 資訊,其他都會被忽略。如果一個 class method 在 subclass 上呼叫,subclass 會作為第一個引數傳入。

Class method 和 C++ 與 Java 的 static method 是有區別的。如果你想瞭解 static method,請看本節的 staticmethod()。關於 class method 的更多資訊,請參考標準型別階層

在 3.9 版的變更: Class methods 現在可以包裝其他描述器,例如 property()

在 3.10 版的變更: Class method 現在繼承了 method 屬性(__module____name____qualname____doc____annotations__),並擁有一個新的 __wrapped__ 屬性。

自從版本 3.11 後不推薦使用,已從版本 3.13 中移除。: Class methods 不能再包裝其他的描述器,例如 property()

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

source 編譯成程式碼或 AST 物件。程式碼物件可以被 exec()eval() 執行。source 可以是一般的字串、bytes 字串、或者 AST 物件。參見 ast module(模組)的說明文件瞭解如何使用 AST 物件。

filename 引數必須是程式碼的檔名;如果程式碼不是從檔案中讀取,可以傳入一些可辨識的值(經常會使用 '<string>' 來替代)。

mode 引數指定了編譯程式碼時必須用的模式。如果 source 是一系列的陳述式,可以是 'exec';如果是單一運算式,可以是 'eval';如果是單個互動式陳述式,可以是 'single'(在最後一種情況下,如果運算式執行結果不是 None 則會被印出來)。

可選引數 flagsdont_inherit 控制啟用哪個編譯器選項以及允許哪個未來功能。如果兩者都不存在(或兩者都為零),則會呼叫與 compile() 相同旗標的程式碼來編譯。如果給定 flags 引數而未給定 dont_inherit(或為零)則無論如何都會使用由 flags 引數所指定的編譯器選項和未來陳述式。如果 dont_inherit 是一個非零整數,則使用 flags 引數 -- 周圍程式碼中的旗標(未來功能和編譯器選項)將被忽略。

編譯器選項和 future 陳述式使用 bits 來表示,可以一起被位元操作 OR 來表示複數個選項。需要被具體定義特徵的位元域可以透過 __future__ module 中 _Feature 實例中的 compiler_flag 屬性來獲得。編譯器旗標可以在 ast module 中搜尋有 PyCF_ 前綴的名稱。

引數 optimize 用來指定編譯器的最佳化級別;預設值 -1 選擇與直譯器的 -O 選項相同的最佳化級別。其他級別為 0(沒有最佳化;__debug__ 為真值)、1(assert 被刪除,__debug__ 為假值)或