Altro
Python ha un operatore condizionale ternario?
Se Python non ha un operatore condizionale ternario, è possibile simularne uno usando altri costrutti del linguaggio?
5549
3
Sì, è stato aggiunto nella versione 2.5. La sintassi dell'espressione è:
Prima viene valutata la
condizione
, poi esattamente una delle duea
ob
viene valutata e restituita in base al valore booleano dellacondizione
. Secondizione
viene valutata aVero
, alloraa
viene valutata e restituita mab
viene ignorata, o altrimenti quandob
viene valutata e restituita maa
viene ignorata.Questo permette il cortocircuito perché quando
condizione
è vera soloa
viene valutata eb
non viene valutata affatto, ma quandocondizione
è falsa solob
viene valutata ea
non viene valutata affatto.Per esempio:
Notate che i condizionali sono un'espressione, non un statement. Questo significa che non si possono usare istruzioni di assegnazione o
passaggio
o altri istruzioni all'interno di una espressione condizionale:Potete, tuttavia, usare le espressioni condizionali per assegnare una variabile in questo modo:
Pensate all'espressione condizionale come al passaggio tra due valori. È molto utile quando si è in una situazione di 'un valore o un altro'altro, ma non fa molto altro.
Se hai bisogno di usare delle dichiarazioni, devi usare un normale
if
statement invece di una espressione condizionale.Tenete presente che è disapprovato da alcuni Pythonisti per diverse ragioni:
condizione ? a : b
di molti altri linguaggi (come C, C++, Go, Perl, Ruby, Java, Javascript, ecc.), il che può portare a bug quando persone non familiari con il comportamento di Python lo usano (potrebbero invertire l'ordine degli argomenti).if
' può essere vero utile, e rendere il tuo script più conciso, complica davvero il tuo codice)Se hai problemi a ricordare l'ordine, ricorda che quando si legge ad alta voce, si dice (quasi) quello che si intende. Per esempio,
x = 4 if b > 8 else 9
viene letto ad alta voce comex sarà 4 se b è maggiore di 8 altrimenti 9
.Documentazione ufficiale:
Espressioni condizionali
Esiste un equivalente dell'operatore ternario "?:" del C?][3]
[3]: https://docs.python.org/3.3/faq/programming.html#is-there-an-equivalent-of-c-s-ternary-operator "Esiste un equivalente dell'operatore ternario "?:" di C?
Per le versioni precedenti alla 2.5, c'è il trucco:
Può dare risultati sbagliati quando
on_true
ha un valore booleano falso; Anche se ha il vantaggio di valutare le espressioni da sinistra a destra, il che è più chiaro secondo me.Da la documentazione:
Nuovo dalla versione 2.5.