2013-07-12 11 views
7

Ich weiß, dass es von einigen verpönt ist, aber ich mag Pythons ternären Operator verwenden, wie es einfach zu lesen (denke ich) if/else Anweisungen. Auf jeden Fall habe ich festgestellt, dass ich dies nicht tun können:Python-ternärer Operator kann mehrere Werte nicht zurückgeben?

>>> 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 

Die Art und Weise dachte ich, der ternäre Operator funktioniert, ist, dass es die folgenden wesentlichen baut:

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

Könnte jemand erklären, warum Mein erstes Codebeispiel funktioniert nicht? Und wenn es einen gibt, bieten Sie einen Einzeiler an, um mehrere Variablen bedingt zuzuweisen?

Antwort

12

Es Parsen dass als drei Werte, die da sind:

1, 
2 if True else 0, 
0 

Daher drei Werte wird es (1,2,0), die mehr als die beiden Werte auf der linken Seite des Ausdrucks ist.

Versuchen:

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

Good ol‘‚Komma-Operator hat niedrigere Priorität als die bedingte ternären‘... Selbst in C arbeitet .. –

+0

Ah, vielen Dank! – Valdogg21

+0

@ Valdogg21 Gern geschehen :) – Doorknob

2

Es ist nur eine Frage der Operator Vorrang. Bedenken Sie:

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

Klammern hinzufügen, wie gebraucht, und Sie werden es an die Arbeit:

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