2012-08-12 118 views
1
當我評估以下操作

蟒蛇三元運算符行爲

0 if True else 1 + 1 if False else 1 

其值爲0但是當我用括號寫這樣

(0 if True else 1) + (0 if False else 1) 

它正確的計算結果爲1,什麼是在第一次發生

案件。

回答

11
0 if True else 1 + 1 if False else 1 

居然是:

(0) if (True) else ((1 + 1) if (False) else (1)) 

這絕對是你想要什麼不同:

((0) if (True) else (1)) + ((1) if (False) else (1)) 
+1

優秀解釋。+ 1 – 2012-08-12 13:00:23

3

ternary operatorleft to right讀取和+具有比條件運算符的優先級低。所以,這兩者是等價的:

>>> 0 if True else 1 + 1 if False else 1 
0 
>>> 0 if True else ((1 + 1) if False else 1) 
0 
-1

三元運算符看起來像「條件值,如果真:值,如果假的」,但似乎蟒蛇不支持它,但是我們可以使用的if-else更換。stype類似於「condition if(b_1)else b_2」,所以您可以依賴它來匹配。如果b_1爲True,則值爲條件,如果b_2爲True,則值爲b_2。

+0

a if b else c是三元運算符的python實現 – 2012-08-12 15:06:40

+0

Python的'value if condition else alternative * * *是*三元運算符,因爲您可以將它用作子表達式 – Vladimir 2012-08-12 15:10:57

+0

我知道它,但我認爲您的解釋更好,我只是想製造結果背後的原因很明顯。 – Sphinx 2012-08-12 16:13:26