2010-06-22 2 views
67

C i wiele innych języków ma operatora conditional (aka ternary). Pozwala to na dokonywanie bardzo zwięzłych wyborów między dwiema wartościami w oparciu o prawdziwość warunku, który sprawia, że ​​wyrażenia, w tym przypisania, są bardzo zwięzłe.python? (warunkowy/ternarny) operator dla zadań

Tęsknię za tym, ponieważ uważam, że mój kod ma wiele zleceń warunkowych, które mają cztery wiersze w Pythonie:

if condition: 
    var = something 
else: 
    var = something_else 

Natomiast w C byłoby:

var = condition? something: something_else; 

Raz lub dwa razy w pliku jest w porządku, ale jeśli masz dużo przypisań warunkowych, liczba linii eksploduje, a co najgorsze, przyciąga do nich oko.

Podoba mi się zwięzłość warunkowego operatora, ponieważ utrzymuje rzeczy, które uważam za nie strategiczne, odciągając mnie od przeglądania kodu.

W Pythonie, czy istnieją jakieś sztuczki, których można użyć do przeniesienia zadania na pojedynczą linię, aby przybliżyć korzyści operatora warunkowego, tak jak je opisałem?

Odpowiedz

128

Python ma takiego operatora:

variable = something if condition else something_else 

Alternatywnie, chociaż nie jest zalecane (patrz @ komentarzu karadoc'S):

variable = (condition and something) or something_else 
+8

To "zmienna = warunek i coś lub coś_element" nawet nie działa. Na przykład "Prawda i fałsz lub prawda" zwraca True, natomiast "Prawda? Fałsz: prawda" zwróci Fałsz. – karadoc

+0

Something or Something_else działa dobrze, prawda? Na przykład, jeśli coś było puste, ustawiałbyś go na coś innego? – Breedly

12

w starszych kodu Pythona, można zobaczyć sztuczkę:

condition and something or something_else 

zostało to jednak zastąpione przez znacznie lepszą wersję ... if ... else ... konstrukcja:

something if condition else something_else 
+0

Dlaczego jednak nie "powracaj, jeśli nie cokolwiek"? – Will

+4

@Will: Ponieważ "return if not whatever" nie jest poprawnym składniowo pythonem? –

+0

@Will Prawdopodobnie dlatego, że nie podajesz części "else"? – glglgl