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