2016-04-23 59 views
1

任何人都可以解釋爲什麼:具體的Python的的if/else一個襯墊參數替換

>>> print 1,2 if 0 else 3,4 
1 3 4 

但:

>>> print(1,2) if 0 else 3,4 
3 4 

也許這不是在所有這種情況下連接?

+8

因爲第一是'打印1,(2如果0,否則,3),4'和第二是'print((1,2)if 0 else 3),4' - 參見https://docs.python.org/2/reference/expressions.html#operator-precedence和https://docs.python.org /2/library/stdtypes.html#truth-value-testing。目前尚不清楚哪一部分令人驚訝。 – jonrsharpe

+1

這就是爲什麼你應該使用括號打印的原因。爲了避免這種混淆。 –

回答

0

引用docs

打印評估依次在每個表達,將所得 對象寫入標準輸出。

所以我們只需要弄清楚這些表達式就是你的情況。

print 1,2 if 0 else 3,4相當於print 1, (2 if 0 else 3), 4。打印語句接收三個「參數」,第一個和第三個是常量表達式,第二個包含三元語句。

print(1,2) if 0 else 3,4相當於打印(1,2) if 0 else 3, 4。打印語句接收兩個「參數」,第一個包含三元語句,第二個是常量表達式。

1

你的第一個例子給出了三個項目print其用逗號隔開:

1 
2 if 0 else 3 
4 

你可以把在不同的地方括號,並得到相同的結果:

print 1, (2 if 0 else 3), 4 

如果你想有元組行爲,可以在那裏使用圓括號:

print (1, 2) if 0 else (3, 4) 

這個問題當然是打印成一個元組而不是單獨的參數。確實,最好的辦法是要麼使用from __future__ import print_function和使用print(*((1, 2) if 0 else (3, 4)))或有一個整體的if - else塊:

if 0: 
    print 1, 2 
else: 
    print 3, 4 
相關問題