Python標準庫---九、內置類型:邏輯值檢測、布爾運算、比較

上一篇文章: Python標準庫---八、內置常量
下一篇文章: Python標準庫---十、內置類型:數字類型

內置類型

如下部分描述瞭解釋器中內置的標準類型。segmentfault

主要內置類型有數字、序列、映射、類、實例和異常。函數

有些多項集類是可變的。 它們用於添加、移除或重排其成員的方法將原地執行,並不返回特定的項,絕對不會返回多項集實例自身而是返回 None。spa

有些操做受多種對象類型的支持;特別地,實際上全部對象均可以被比較、檢測邏輯值,以及轉換爲字符串(使用 repr() 函數或略有差別的 str() 函數)。 後一個函數是在對象由 print() 函數輸出時被隱式地調用的。對象

邏輯值檢測

任何對象均可以進行邏輯值的檢測,以便在 if 或 while 做爲條件或是做爲下文所述布爾運算的操做數來使用。排序

一個對象在默認狀況下均被視爲真值,除非當該對象被調用時其所屬類定義了 __bool__() 方法且返回 False 或是定義了 __len__() 方法且返回零。 下面基本完整地列出了會被視爲假值的內置對象:ip

  • 被定義爲假值的常量: None 和 False。
  • 任何數值類型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 空的序列和多項集: '', (), [], {}, set(), range(0)

產生布爾值結果的運算和內置函數老是返回 0 或 False 做爲假值,1 或 True 做爲真值,除非另行說明。 (重要例外:布爾運算 or 和 and 老是返回其中一個操做數。)ci

布爾運算 --- and, or, not

這些屬於布爾運算,按優先級升序排列:字符串

clipboard.png

註釋:get

  1. 這是個短路運算符,所以只有在第一個參數爲假值時纔會對第二個參數求值。
  2. 這是個短路運算符,所以只有在第一個參數爲真值時纔會對第二個參數求值。
  3. not 的優先級比非布爾運算符低,所以 not a == b 會被解讀爲 not (a == b) 而 a == not b 會引起語法錯誤。

比較

在 Python 中有八種比較運算符。 它們的優先級相同(比布爾運算的優先級高)。 比較運算能夠任意串連;例如,x < y <= z 等價於 x < y and y <= z,前者的不一樣之處在於 y 只被求值一次(但在兩種狀況下當 x < y 結果爲假值時 z 都不會被求值)。it

此表格彙總了比較運算:

clipboard.png

除了不一樣數字類型之外,不一樣類型的對象比較時絕對不會相等。 並且,某些類型(例如函數對象)僅支持簡化比較形式,即任何兩個該種類型的對象一定不相等。 <, <=, > 和 >= 運算符在如下狀況中將引起 TypeError 異常:當比較複數與另外一個內置數字類型時,當兩個對象具備沒法被比較的不一樣類型時,或在未定義次序的其餘狀況時。

具備不一樣標識的類的實例比較結果一般爲不相等,除非類定義了 __eq__() 方法。

一個類實例不能與相同類或的其餘實例或其餘類型的對象進行排序,除非該類定義了足夠多的方法,包括 __lt__(), __le__(), __gt__() 以及 __ge__() (而若是你想實現常規意義上的比較操做,一般只要有 __lt__() 和 __eq__() 就能夠了)。

is 和 is not 運算符沒法自定義;而且它們能夠被應用於任意兩個對象而不會引起異常。

還有兩種具備相同語法優先級的運算 in 和 not in,它們被 iterable 或實現了 __contains__() 方法的類型所支持。

上一篇文章: Python標準庫---八、內置常量
下一篇文章: Python標準庫---十、內置類型:數字類型
相關文章
相關標籤/搜索