2013-07-12 17 views
7

Wiem, że niektórzy są zaskoczeni, ale lubię używać potrójnego operatora Pythona, ponieważ sprawia on, że instrukcje są czystsze do przeczytania (chyba). W każdym razie, znalazłem, że nie mogę tego zrobić:Operator potrójny w języku Python nie może zwracać wielu wartości?

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

Sposób Pomyślałem działa operator trójargumentowy jest to, że w zasadzie opiera się, co następuje:

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

Może ktoś wyjaśnić, dlaczego moja pierwsza próbka kodu nie działa? A jeśli takowy istnieje, należy podać jeden liniowiec, aby przypisać wiele zmiennych warunkowo?

Odpowiedz

12

To analizowania że trzech wartości, które są:

1, 
2 if True else 0, 
0 

Dlatego też staje się trzy wartości (1,2,0), który jest więcej niż dwie wartości po lewej stronie wyrażenia.

Spróbuj:

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

Dobry ol”«operator przecinek ma niższy priorytet niż trójskładnikowego warunkowego»... Nawet działa w C. .. –

+0

Ah, dziękuję bardzo! – Valdogg21

+0

@ Valdogg21 Serdecznie zapraszamy :) – Doorknob

2

To tylko kwestia pierwszeństwa operatora. Rozważmy:

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

Dodaj nawiasów, ile potrzeba, a otrzymasz go do pracy:

(1,2) if True else (0,0) 
Powiązane problemy