Jeśli Python nie ma trójwarstwowego operatora warunkowego, czy można go symulować za pomocą innych konstrukcji językowych?
1 odpowiedź
Tak, został dodany w wersji 2.5. Składnia wyrażenia to:
a if condition else b
Pierwszy warunek jest oceniany, wtedy dokładnie jeden, a lub b, jest oceniany i zwracany na podstawie wartości logicznej warunku. Jeśli warunek ma wartość True, to a jest obliczane i zwracane, wtedy b jest ignorowane, lub gdy b jest oceniane i zwracane, wtedy a jest ignorowane.
Pozwala to na zwarcie, ponieważ gdy warunek jest prawdziwy, tylko a jest oceniane, a b nie jest w ogóle analizowane, ale gdy warunek jest fałszywy, tylko b jest oceniane i a nie jest w ogóle oceniane.
Na przykład:
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
Zauważ, że warunkowe są wyrażeniem, a nie instrukcją. Oznacza to, że nie można używać instrukcji przypisania lub przepustki lub innych instrukcji w wyrażeniu warunkowym:
>>> pass if False else x = 3
File "<stdin>", line 1
pass if False else x = 3
^
SyntaxError: invalid syntax
Możesz jednak użyć wyrażeń warunkowych, aby przypisać zmienną w ten sposób:
x = a if True else b
Pomyśl o wyrażeniu warunkowym jako o przełączaniu między dwiema wartościami. Jest to bardzo przydatne, gdy znajdujesz się w sytuacji „jednej wartości lub innej”, ale nie robi nic więcej.
Jeśli potrzebujesz użyć instrukcji, musisz użyć zwykłej instrukcji if zamiast warunkowego wyrażenia.