布林

布林 在 Python

70 個練習

關於 布林

Python 使用bool型別來表示 true 和 false 值,這個型別是int的子類別。 這個型別裡只有兩個布林值:True和False。 這些值可以指定給變數,也可以與布林運算子(and、or、not)結合:

>>> true_variable = True and True
>>> false_variable = True and False

>>> true_variable = False or True
>>> false_variable = False or False

>>> true_variable = not False
>>> false_variable = not True

布林運算子使用_短路求值_,這表示運算子右側的運算式只會在需要時才被求值。

每個運算子的優先順序都不同,其中not會比and和or先求值。 括號可以用來讓運算式的某個部分比其他部分先求值:

>>> not True and True
False

>>> not (True and False)
True

所有boolean operators的優先順序都低於 Python 的comparison operators,例如==、>、<、is和is not。

型別強制轉換與真值性

bool函式(bool())會把任何物件轉換成布林值。 預設情況下,所有物件都會回傳True,除非它被定義為回傳False。

有幾個built-ins依定義一律被視為False:

  • 常數None和False
  • 任何_數值型別_的零(int、float、complex、decimal或fraction)
  • 空的_序列_和_容器_(str、list、set、tuple、dict、range(0))
>>> bool(None)
False

>>> bool(1)
True

>>> bool(0)
False

>>> bool([1,2,3])
True

>>> bool([])
False

>>> bool({"Pig" : 1, "Cow": 3})
True

>>> bool({})
False

當物件被用在_布林情境_中時,會透過bool()以透明的方式評估它是_真值_還是_假值_:

>>> a = "is this true?"
>>> b = []

# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
...  print("True")

# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
...   print("False")

類別只要覆寫並實作__bool__()方法,或是__len__()方法(或兩者),就可以定義自己在真值情境下的評估方式。

布林值的底層運作方式

bool型別是以_int_的_子型別_形式實作。 也就是說,True在_數值上等於_1,而False在_數值上等於_0。 使用_相等運算子_比較它們時,就可以觀察到這點:

>>> 1 == True
True

>>> 0 == False
True

不過,bools和ints仍然不同,用_身分運算子_is比較它們時就能看出這點:

>>> 1 is True
False

>>> 0 is False
False

注意:在 python >= 3.8 中,把字面值(例如1、''、[]或{})放在is的_左側_會發出警告。

使用相等運算子把布林變數拿來和True或False比較,被視為一種 Python 反模式。 應該改用身分運算子is:


>>> flag = True

# Not "Pythonic"
>>> if flag == True:
...    print("This works, but it's not considered Pythonic.")

# A better way
>>> if flag:
...    print("Pythonistas prefer this pattern as more Pythonic.")
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 布林

練習已鎖定

再解鎖 2 個練習,就能練習 布林