Python bool型別和比較運算子(入門必讀)

2020-07-16 10:04:42
Python 提供了 bool 型別來表示真(對)或假(錯),比如常見的 5 > 3 比較算式,這個是正確的,在程式世界裡稱之為真(對),Python 使用 True 來代表;再比如 4 > 20 比較算式,這個是錯誤的,在程式世界裡稱之為假(錯),Python 使用 False 來代表。

由此可見,bool 型別就是用於代表某個事情的真(對)或假(錯),如果這個事情是正確的,用 True 代表;如果這個事情是錯誤的,用 False 代表。

比較運算子用於判斷兩個值(這兩個值既可以是變數,也可以是常數,還可以是表示式)之間的大小,比較運算的結果是 bool 值(True 代表真,False 代表假)。

Python 支援的比較運算子如下:
  • >:大於,如果運算子前面的值大於後面的值,則返回 True;否則返回 False。
  • >=:大於或等於,如果運算子前面的值大於或等於後面的值,則返回 True;否則返回 False。
  • <:小於,如果運算子前面的值小於後面的值,則返回 True;否則返回 False。
  • <=:小於或等於,如果運算子前面的值小於或等於後面的值,則返回 True;否則返回 False。
  • ==:等於,如果運算子前面的值等於後面的值,則返回 True;否則返回 False。
  • !=:不等於,如果運算子前面的值不等於後面的值,則返回 True;否則返回 False。
  • is:判斷兩個變數所參照的物件是否相同,如果相同則返回 True。
  • is not:判斷兩個變數所參照的物件是否不相同,如果不相同則返回 True。

下面程式示範了比較運算子的使用:
# 輸出True
print("5是否大於 4:", 5 > 4)
# 輸出False
print("3的4次方是否大於等於90.0:", 3 ** 4 >= 90)
# 輸出True
print("20是否大於等於20.0:", 20 >= 20.0)
# 輸出True
print("5和5.0是否相等:", 5 == 5.0)
# 輸出False
print("True和False是否相等:", True == False)
上面程式簡單示範了 Python 比較運算子的功能和用法。

Python 的兩個 bool 值分別是 True 和 False,但實際上 True 也可被當成整數 1 使用,False 也可被當成整數 0 使用。也就是說,True、False 兩個值完全可以參與各種算術運算。例如如下程式碼:
# 輸出True
print("1和True是否相等:", 1 == True)
# 輸出True
print("0和False是否相等:", 0 == False)
print(True + False) # 輸出1
print(False - True)  # 輸出-1
關於 == 與 is 看上去很相似,但實質上有區別,== 只比較兩個變數的值,但 is 要求兩個變數參照同一個物件。看如下程式碼:
import time
# 獲取當前時間
a = time.gmtime()
b =  time.gmtime()
print(a == b) # a和b兩個時間相等,輸出True
print(a is b) # a和b不是同一個物件,輸出False
上面程式碼中 a、b 兩個變數都代表當前系統時間,因此 a、b 兩個變數的時間值是相等的,故程式使用“==”判斷返回 True。但由於 a、b 兩個變數分別參照不同的物件(每次呼叫 gmtime() 函數都返回不同的物件),因此 a is b 返回 False。

實際上,Python 提供了一個全域性的 id() 函數來判斷變數所參照的物件的記憶體地址(相當於物件在計算機記憶體中儲存位置的門牌號),如果兩個物件所在的記憶體地址相同(相當於它們住在同一個房間內,計算機同一塊記憶體在任一時刻只能存放一個物件),則說明這兩個物件其實是同一個物件。

由此可見,is 判斷其實就是要求通過 id() 函數計算兩個物件時返回相同的地址。例如,使用 id() 函數判斷上面的 a、b 兩個變數:

print(id(a))
print(id(b))

從執行結果中將會看到 a、b 兩個變數所參照的物件的記憶體地址是不同的,這樣通過 is 來判斷 a、b 兩個變數自然也就輸出 False 了。