內建型別

以下章節描述了直譯器中內建的標準型別。

主要內建型別為數字、序列、對映、class(類別)、實例和例外。

有些集合類別是 mutable(可變的)。那些用於原地 (in-place) 加入、移除或重新排列其成員且不回傳特定項的 method(方法),也只會回傳 None 而非集合實例自己。

某些操作已被多種物件型別支援;特別是實務上所有物件都已經可以做相等性比較、真值檢測及被轉換為字串(使用 repr() 函式或稍有差異的 str() 函式),後者為當物件傳入 print() 函式印出時在背後被呼叫的函式。

真值檢測

任何物件都可以進行檢測以判斷是否為真值,以便在 ifwhile 條件中使用,或是作為如下所述 boolean(布林)運算之運算元所用。

預設情況下,一個物件會被視為真值,除非它的 class 定義了會回傳 False__bool__() method 或是定義了會回傳零的 __len__() method。[1] 如果其中一個 method 在被呼叫時引發例外,該例外將會被傳播,且該物件不具有真值(例如 NotImplemented)。以下列出了大部分會被視為 false 的內建物件:

  • 定義為 false 之常數:NoneFalse

  • 任何數值型別的零:00.00jDecimal(0)Fraction(0, 1)

  • 空的序列和集合:''()[]{}set()range(0)

除非另有特別說明,產生 boolean 結果的操作或內建函式都會回傳 0False 作為假值、1True 作為真值。(重要例外: boolean 運算 orand 回傳的是其中一個運算元。)

Boolean(布林)運算 --- and, or, not

下方為 Boolean 運算,按優先順序排序:

運算

結果

註解

x or y

假如 x 為真,則 x,否則 y

(1)

x and y

假如 x 為假,則 x,否則 y

(2)

not x

假如 x 為假,則 True,否則 False

(3)

註解:

  1. 這是一個短路運算子,所以他只有在第一個引數為假時,才會對第二個引數求值。

  2. 這是一個短路運算子,所以他只有在第一個引數為真時,才會對第二個引數求值。

  3. not 比非 Boolean 運算子有較低的優先權,因此 not a == b 可直譯為 not (a == b),而 a == not b 會導致語法錯誤。

比較運算

在 Python 裡共有 8 種比較運算。他們的優先順序都相同(皆優先於 Boolean 運算)。比較運算可以任意的串連;例如,x < y <= z 等同於 x < y and y <= z,差異只在於前者的 y 只有被求值一次(但在這兩個例子中,當 x < y 為假時,z 皆不會被求值)。

這個表格統整所有比較運算:

運算

含義

<

小於

<=

小於等於

>

大於

>=

大於等於

==

等於

!=

不等於

is

物件識別性

is not

否定的物件識別性

除非有另外聲明,不同型別的物件不能進行相等比較。運算子 == 總有定義,但在某些物件型別(例如,class 物件)時,運算子會等同於 is。其他運算子 <<=>>= 皆僅在有意義的部分有所定義;例如,當其中一個引數為複數時,將引發一個 TypeError 的例外。

一個 class 的非相同實例通常會比較為不相等,除非 class 有定義 __eq__() method。

一個 class 的實例不可以與其他相同 class 的實例或其他物件型別進行排序,除非 class 定義足夠的 method ,包含 __lt__()__le__()__gt__()__ge__()(一般來說,使用 __lt__()__eq__() 就可以滿足常規意義上的比較運算子)。

無法自訂 is