本文摘自代碼領(lǐng)悟
提問:
如果Python沒有三元條件運算符,是否可以使用其他語言構(gòu)造模擬一個惑折?
回答:
是的授账,它是在2.5版本中添加的。 表達(dá)式語法為:
a if condition else b
首先計算condition
惨驶,然后根據(jù)condition
的Boolean值計算并返回condition
或condition
中的一個白热。 如果condition
求值為True
,則condition
被求值并返回但condition
被忽略粗卜,否則當(dāng)condition
被求值并返回但condition
被忽略時屋确。
這允許短路,因為當(dāng)condition
為真時续扔,只評估condition
攻臀,而condition
根本不評估,但是當(dāng)condition
為假時纱昧,只評估condition
茵烈,而condition
根本不評估。
例如:
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
請注意砌些,條件是表達(dá)式呜投,而不是語句加匈。 這意味著您不能在條件表達(dá)式中使用賦值語句或pass
或其他語句:
>>> pass if False else x = 3
File "<stdin>", line 1
pass if False else x = 3
^
SyntaxError: invalid syntax
但是,您可以使用條件表達(dá)式來分配變量仑荐,如下所示:
x = a if True else b
將條件表達(dá)式視為在兩個值之間切換雕拼。 當(dāng)你處于"一個值或另一個值"的情況時,它非常有用粘招,但它沒有做太多其他事情啥寇。
如果需要使用語句,則必須使用普通if
語句而不是條件表達(dá)式洒扎。
請記住辑甜,由于幾個原因,一些Pythonistas不贊成它:
- 參數(shù)的順序與經(jīng)典的
condition ? a : b
來自許多其他語言的三元運算符(例如C袍冷,C++磷醋,Go,Perl胡诗,Ruby邓线,Java,JavaScript等煌恢。)骇陈,當(dāng)不熟悉Python的"令人驚訝"行為的人使用它時(他們可能會顛倒參數(shù)順序),這可能會導(dǎo)致錯誤瑰抵。 - 有些人發(fā)現(xiàn)它"笨拙"你雌,因為它違背了正常的思想流動(首先考慮條件,然后考慮效果)二汛。
- 文體原因匪蝙。 (雖然'inline
if
'可以是真正的有用,并使您的腳本更簡潔习贫,但它確實會使您的代碼復(fù)雜化)
如果你在記住順序時遇到困難逛球,那么請記住,當(dāng)大聲朗讀時苫昌,你(幾乎)說出你的意思颤绕。 例如,x = 4 if b > 8 else 9
被朗讀為x will be 4 if b is greater than 8 otherwise 9
祟身。
正式文件: