2010-06-22 11 views
67

C e molte altre lingue hanno un operatore conditional (aka ternary). Ciò consente di effettuare scelte molto concise tra due valori basati sulla verità di una condizione, che rende le espressioni, inclusi i compiti, molto concise.python? (condizionale/ternario) per gli incarichi

Mi manca questo perché trovo che il mio codice ha un sacco di assegnazioni condizionali che prendono quattro linee in Python:

if condition: 
    var = something 
else: 
    var = something_else 

Mentre in C sarebbe:

var = condition? something: something_else; 

Una o due volte in un file va bene, ma se hai molti compiti condizionali il numero di linee esplode e, peggio ancora, l'occhio è attratto da loro.

Mi piace la concisione dell'operatore condizionale perché mantiene le cose che ritengo non strategiche mi distraggono quando si sfoglia il codice.

Quindi, in Python, esistono trucchi che è possibile utilizzare per ottenere l'assegnazione su una singola riga per approssimare i vantaggi dell'operatore condizionale come li ho delineati?

risposta

128

Python ha un tale operatore:

variable = something if condition else something_else 

In alternativa, anche se non è raccomandato (vedere @ commento di Karadoc):

variable = (condition and something) or something_else 
+8

Quella "variabile = condizione e qualcosa o qualcosa_cambio" non funziona nemmeno. Ad esempio, "True e False o True" restituisce True, mentre "True? False: True" restituisce False. – karadoc

+0

Qualcosa o Something_else funziona bene? Ad esempio se qualcosa era nullo, lo avresti impostato su qualcosa_stato? – Breedly

12

Nel codice Python più vecchio, è possibile vedere il trucco:

condition and something or something_else 

tuttavia, questo è stato sostituito dal molto superiore ... if ... else ... construct:

something if condition else something_else 
+0

perché non funziona "return if not whatever", comunque? – Will

+4

@Will: Perché "return if not whatever" non è sintatticamente corretto Python? –

+0

@Will Probabilmente perché non si fornisce una parte 'else'? – glglgl

Problemi correlati