布林邏輯表示式

布林邏輯表示式中,除了評估到 TrueFalse,返回其解釋為 TrueFalse。它是 Pythonic 表示邏輯的方式,否則可能需要 if-else 測試。

和運算子

and 運算子計算所有表示式,如果所有表示式求值為 True,則返回最後一個表示式。否則返回第一個計算為 False 的值:

>>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""

或者運算子

or 運算子從左到右計算表示式,並返回計算為 True 的第一個值或最後一個值(如果沒有 True)。

>>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]

懶惰的評價

使用此方法時,請記住評估是懶惰的。不評估不需要評估以確定結果的表示式。例如:

>>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

在上面的例子中,print_me 永遠不會執行,因為 Python 在遇到 0False)時可以確定整個表示式是 False。如果需要執行 print_me 來為你的程式邏輯提供服務,請記住這一點。

測試多種條件

檢查多個條件時常見的錯誤是錯誤地應用邏輯。

這個例子試圖檢查兩個變數是否都大於 2.語句被評估為 - if (a) and (b > 2)。這會產生意想不到的結果,因為當 a 不為零時,bool(a) 評估為 True

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')
    
yes

每個變數都需要單獨進行比較。

>>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')
        
no

當檢查變數是否是多個值之一時,會產生另一個類似的錯誤。此示例中的語句被評估為 - if (a == 3) or (4) or (6)。這會產生意想不到的結果,因為 bool(4)bool(6) 各自評估為 True

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
       
yes

同樣,每次比較必須單獨進行

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
        
no

使用 in 運算子是編寫此函式的規範方法。

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
    
no