# 每天學點Python之布爾類型
Python中的布爾類型有兩個常量True和False表示。
### 布爾值轉化
Python中的布爾值是可以轉化為數值的,True表示1,而False表示0,可以對其進行數值運算,但不建議這么做,會引起代碼的混亂。
### 真值測試
在Python中所有的對象都可以進行真值測試,下面羅列一下判斷為假的情況:
- None
- False
- 數值中的零,包括0,0.0,0j(虛數)
- 空序列,包括空字符串(”),空元組(()),空列表([])
- 空的字典{}
- 自定義的對象的實例,該對象的__bool__方法返回False或者__len__方法返回0
除了以上的情況外,所有的對象在if或者while語句中的表現都為真。
### 布爾操作
在Python中布爾值可以進行或、且、否三種操作,與很多語言不同的是,Python中不是用符號,而是用英文單詞來表示,分別是or、and和not。
需要注意的是or和and都支持短路操作,如果or的左邊返回True,則右邊就不會判斷;同理如果and左邊返回False,右邊也不會進行判斷。
not的優先級很低,`not a == b`表示的是`not (a == b)`,而表達式`a == not b`會直接報錯,需要加括號`a == (not b)`。
### 比較操作
通過比較操作會返回布爾類型的值。除了普通的比較操作外,Python還支持is操作來判斷兩個對象是否是同一個對象,下面是Python支持的所有的比較操作:
| 操作符 | 解釋 |
|-----|-----|
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| == | 等于 |
| != | 不等于 |
| is | 是相同對象 |
| is not | 是不同對象 |
**實例**
其他操作比較常見,給出一些is的用法示例:
~~~
a = None
b = None
# True,因為None只有唯一實例
r = a is b
a = "22"
b = "22"
# True,直接聲明的相同字符串也會指向同一個實例
r = a is b
a = [1]
b = [1]
# False,相等但不是同一個實例
r = a is b
a = [1]
b = a
c = a
# True,指向同一個實例
r = b is c
~~~
### 操作符重載
在Python中是支持操作符重載的,可以通過重載操作符來改變一般意義上的比較操作,具體內容會在學習object時再整理。