三元運算符通常在Python里被稱為條件表達式,這些表達式基于真(true)/假(false)的條件判斷,在Python 2.4以上才有了三元操作。
下面是一個偽代碼和例子:
偽代碼:
#如果條件為真,返回真 否則返回假
condition_is_true if condition else condition_is_false
例子:
is_fat = True
state = "fat" if is_fat else "not fat"
它允許用簡單的一行快速判斷,而不是使用復(fù)雜的多行if語句。
這在大多數(shù)時候非常有用,而且可以使代碼簡單可維護。
另一個晦澀一點的用法比較少見,它使用了元組,請繼續(xù)看:
偽代碼:
#(返回假,返回真)[真或假]
(if_test_is_false, if_test_is_true)[test]
例子:
fat = True
fitness = ("skinny", "fat")[fat]
print("Ali is", fitness)
#輸出: Ali is fat
這之所以能正常工作,是因為在Python中,True等于1,而False等于0,這就相當(dāng)于在元組中使用0和1來選取數(shù)據(jù)。
上面的例子沒有被廣泛使用,而且Python玩家一般不喜歡那樣,因為沒有Python味兒(Pythonic)。這樣的用法很容易把真正的數(shù)據(jù)與True/False弄混。
另外一個不使用元組條件表達式的緣故是因為在元組中會把兩個條件都執(zhí)行,而 if-else 的條件表達式不會這樣。
例如:
condition = True
print(2 if condition else 1 / 0)
#輸出: 2
print((1 / 0, 2)[condition])
#輸出ZeroDivisionError異常
這是因為在元組中是先建數(shù)據(jù),然后用True(1)/False(0)來索引到數(shù)據(jù)。
而if-else條件表達式遵循普通的if-else邏輯樹,
因此,如果邏輯中的條件異常,或者是重計算型(計算較久)的情況下,最好盡量避免使用元組條件表達式。