Python 的 `truthy` 和 `falsy`

Python 的 `truthy` 和 `falsy`

本文將說明 Python 的 truthyfalsy

YouTube Video

Python 的 truthyfalsy

truthyfalsy 的定義

在 Python 中,條件表達式中的對象會被評估為 'True' 或 'False'。Truthy 指被評估為 'True' 的對象,Falsy 指被評估為 'False' 的對象。這些評估通常用於條件分支,例如 if 語句或 while 循環中。另外,bool() 函數可以接受任何物件並返回其布林值。

Falsy(被評估為 False 的對象)

在 Python 中,下列物件被視為「假值(falsy)」:。

  • False

  • None

  • 數值型的零值

    • 例如:00.0
  • 空的序列類型(例如空的串列、元組或字串)

    • 例如:[]()""
  • 空字典

    • 例如:{}
  • 空集合

    • 例如:set()

當這些物件用於 if 條件中時,它們被評估為「假值」。例如,您可以這樣編寫程式碼。

1if not []:
2    print("The list is falsy.")
  • 在此程式碼中,列表 [] 是空的,因此被評估為「假值」,並執行 print 語句。

Truthy(被評估為 True 的對象)

不被視為「假值(falsy)」的物件就被視為「真值(truthy)」。

  • 非零數字(整數,浮點數)

    • 例子:13.14-100
  • 非空序列類型(列表,元組,字符串等)

    • 例子:[1, 2, 3](1, 2)"Hello"
  • 非空字典

    • 例子:{"key": "value"}
  • 非空集合

    • 例子:{1, 2, 3}

被視為「真值(truthy)」的物件,在 if 條件判斷中會被評估為 True(真)。例如,您可以這樣編寫程式碼。

1if [1, 2, 3]:
2    print("The list is truthy.")
  • 在上面的程式碼中,由於串列 [1, 2, 3] 並不是空的,所以它被評估為「真值(truthy)」,並執行 print 敘述。

使用 bool() 函數來評估布林值

你可以使用 bool() 函數來判斷物件的布林值。

 1# Examples of falsy values
 2print("False is", "truthy" if bool(False) else "falsy")
 3print("0 is", "truthy" if bool(0) else "falsy")
 4print('"" is', "truthy" if bool("") else "falsy")
 5print("None is", "truthy" if bool(None) else "falsy")
 6print("[] is", "truthy" if bool([]) else "falsy")
 7
 8# Examples of truthy values
 9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
  • 此程式碼展示了如何判斷各種數值的真值(邏輯值)。例如,數值 0 和空字串會被視為 False,而空格或字串 "0" 會被視為 True

使用「真值」和「假值」

通過使用「真值」和「假值」,程式碼可以寫得更簡潔直觀。特別是,if 語句通常可以不需要明確的比較來進行評估,從而使其更簡短。例如,以下兩段程式碼的行為相似,但第一段更為簡潔。

1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5    print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9    print("The list is not empty.")

在上面的例子中,可以看到只要 my_list 不是空列表,就被評估為「真值」,這就避免了明確的比較。

使用「真值」和「假值」進行設計

通過有效利用「真值」和「假值」的概念,可以提高程式碼的可讀性和效率。它們特別適用於設定預設值、檢查變數有效性和驗證輸入。例如,如果您預期傳遞的是 None 或一個空列表作為參數,您可以這樣編寫程式碼。

1def process_data(data=None):
2    data = data or []
3    print(data)
4
5process_data()  # An empty list is used by default.
  • 在這段程式碼中,如果 dataNone,就會將空串列 [] 設為預設值。這樣,使用 truthyfalsy 可以更簡潔地設置默認值。

為避免非預期行為需要注意的要點

不過,雖然利用「真值(truthy)」和「假值(falsy)」可以讓程式更簡潔方便,但要注意這可能導致非預期的行為。例如,在這段程式碼中,不僅當 dataNone,只要是被評估為 False 的值(像是空字串或 0),也會被替換成預設的空串列 []。因此,如果需要更嚴格的條件,例如僅在值為 None 時進行初始化,建議使用像 value is None: 這種明確的條件。根據不同情況,開發時需要在簡潔與嚴謹之間取得平衡。

1def process_data(data=None):
2    if data is None:
3        data = []
4    print(data)
5
6process_data()   # An empty list is used by default.
7process_data(0)  # 0 is printed because it's not None.
  • 在這段程式碼中,只有當 dataNone 時才會初始化為空清單,其它像是 0 這樣被視為偽(falsy)的值會保持原樣。

在自訂物件中控制布林值

即使在自訂類別中,也可以透過定義 __bool__()__len__() 來控制實例的布林值。

 1class MyContainer:
 2    def __init__(self, items):
 3        self.items = items
 4
 5    def __len__(self):
 6        return len(self.items)
 7
 8box = MyContainer([])
 9print(bool(box))  # False
10
11box.items.append("item")
12print(bool(box))  # True
  • 在這段程式碼中,__len__() 方法讓容器在為空時被評估為 False,有元素時則評估為 True。

結論

TruthyFalsy 的概念在 Python 中對於編寫簡潔的條件表達式以及使代碼更直觀非常重要。理解並正確使用它們可以極大地提高代碼的可讀性和效率。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video