2013-07-12 39 views
7

我知道它被某些人所詬病,但我喜歡使用Python的三元運算符,因爲它使簡單的if/else語句清晰可讀(我認爲)。在任何情況下,我發現我不能做到這一點:Python三元運算符不能返回多個值嗎?

>>> a,b = 1,2 if True else 0,0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

我想通了三元運算符的工作方式是,它基本上是建立在以下幾點:

if True: 
    a,b = 1,2 
else: 
    a,b = 0,0 

有人能解釋爲什麼我的第一個代碼示例不起作用?而且,如果有一個,提供一個單行程序來有條件地分配多個變量?

回答

12

它解析,作爲三個值,它們是:

1, 
2 if True else 0, 
0 

因此它成爲三個值(1,2,0),這是比在表達的左側的兩個值的更多。

嘗試:

a,b = (1,2) if True else (0,0) 
+1

好醇」‘逗號操作符比條件下三元優先’......即使工作在C. .. – 2013-07-12 19:50:15

+0

啊,非常感謝! – Valdogg21

+0

@ Valdogg21歡迎您:) – Doorknob

2

這只是一個運算符優先級的問題。試想一下:

>>> 1,2 if True else 0,0 
(1, 2, 0) 

添加括號根據需要,你會得到它的工作:

(1,2) if True else (0,0)