布林邏輯表示式
布林邏輯表示式中,除了評估到 True
或 False
,返回值其解釋為 True
或 False
。它是 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 在遇到 0
(False
)時可以確定整個表示式是 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