Come usare l'operatore ternario di Python
Pubblicato: 2023-01-04Questa guida ti insegnerà come usare l'operatore ternario in Python. Imparerai la sintassi e codificherai diversi esempi per capire come funziona.
Inizieremo esaminando come funziona l'istruzione condizionale if-else e quindi impareremo a scrivere un'espressione equivalente utilizzando l'operatore ternario.
Successivamente, codificheremo alcuni esempi e poi impareremo come emulare il comportamento dell'operatore ternario di Python usando una tupla e un dizionario Python. Infine, esamineremo alcuni casi d'uso in cui dovresti preferire l'uso dell'operatore ternario.
Cominciamo!
L'istruzione If-Else in Python: una recensione
Puoi codificare avviando un REPL Python o nell'editor Python online di Geekflare.
La sintassi generica dell'istruzione if-else in Python è la seguente:
if condition: # do this else: # do this
Nello snippet precedente, condition
denota la condizione da controllare. Se la condizione restituisce True
, viene attivato il blocco if. Se la condizione restituisce False
, vengono eseguite le istruzioni all'interno del blocco else.
Ecco un esempio in cui alla variabile game_over
viene assegnato un valore booleano a seconda che il valore energy
sia o meno minore o uguale a zero.
- Se
energy <= 0
,game_over
èTrue
. - Altrimenti,
game_over
è falso.
Il seguente frammento di codice mostra come farlo utilizzando le istruzioni condizionali if-else:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
In questo esempio, energy
è -1 che è minore di 0. Quindi game_over
è True.
Operatore ternario Python: sintassi ed esempi
Python ha un operatore ternario che funziona in modo molto simile all'operatore condizionale ternario in linguaggi come C e C++. La sintassi generale per usarlo è la seguente:
expression1 if condition else expression2
Analizziamo la sintassi precedente:
-
condition
: la condizione da verificare. -
expression1
: l'espressione da valutare se la condizione è True. -
expression2
: l'espressione da valutare se la condizione è False.
Ora identificheremo quali expression1
, expression2
e condition
dovrebbero essere dalla versione if-else del codice.
Mettendo tutto insieme, abbiamo quanto segue usando l'operatore ternario di Python.
game_over = True if energy <= 0 else False print(game_over) # True
Codifichiamo un altro esempio. Supponi di gestire una libreria e di offrire ai lettori uno sconto sul loro acquisto a seconda della frequenza con cui hanno visitato il tuo negozio nell'ultimo anno.
Lascia che numVisits
indichi il numero di visite.
- Se
numVisits > 7
, la percentuale di sconto,discount_perc
è 20. - Altrimenti,
discount_perc
è 5.
Usiamo l'operatore ternario per assegnare valore alla variabile discount_perc
.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
Successivamente, impareremo come emulare l'operatore ternario usando una tupla Python e un dizionario.
Emulazione dell'operatore ternario con Python Tuple
Come tutti gli iterabili in Python, le tuple seguono zero indicizzazione. Quindi, se hai due elementi in una tupla, tuple_name[0]
denota il primo elemento nella tupla e tuple_name[1]
dà il secondo elemento nella tupla.
I tipi di dati di base in Python sono integer, float, string e boolean. Python supporta il casting di tipi che consente di rappresentare un particolare tipo di dati mediante la sua rappresentazione equivalente in un altro tipo di dati.
Avvia un REPL Python ed esegui gli esempi seguenti. Se provi a convertire numeri interi in booleani, noterai quanto segue:
-
bool(0)
èFalse
. -
bool(<any non-zero integer>)
restituisceTrue
.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
Allo stesso modo, quando si esegue il cast di Boolean su numeri interi, si ha quanto segue:
>>> int(True) 1 >>> int(False) 0
Mettendo insieme il cast di tipi e l'indicizzazione, possiamo fare come segue:
- Elemento all'indice 0 nella tupla: il valore da usare quando la
condition
èFalse
. - Elemento all'indice 1 nella tupla: il valore da usare quando la
condition
èTrue
.
Usando quanto sopra, abbiamo quanto segue:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Qui, la condizione numVisits > 7
è True
poiché numVisits
è 10. Poiché int(True)
è 1, il valore di discount_perc
è 20, l'elemento all'indice 1.
Emulazione dell'operatore ternario con il dizionario Python
Puoi impostare True
e False
come chiavi del dizionario. E puoi impostare expression1
ed expression2
come valori corrispondenti rispettivamente alle chiavi True
e False
.
some_dict = {True: expression1, False: expression2 }
Cosa fai dopo? Ora se usi some_dict[condition]
, expression1
corrispondente alla chiave True
viene valutata se la condition
è True
. E expression2
viene valutato quando la condition
è False
.
Codifichiamo l'esempio discount_perc
(di nuovo) ma questa volta usando un dizionario Python.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Qui, numVisits = 10
che è maggiore di 7. Pertanto, la condizione numVisits > 7
è True
. Quindi discount_dict[numVisits > 7]
discount_dict[True]
che è il valore 20.
Dovresti sempre usare l'operatore ternario di Python?
Finora abbiamo imparato a usare l'operatore ternario. Ma dovremmo sempre usare l'operatore ternario? Bene, l'operatore ternario potrebbe non essere la scelta migliore per tutti i casi d'uso. Questa sezione si interrompe quando dovresti preferire l'uso dell'operatore ternario rispetto alle istruzioni if-else. Tratteremo anche quando dovremmo prendere in considerazione l'uso dell'istruzione if-else invece dell'operatore ternario.
Più conciso dei blocchi If-Else
Come accennato, in Python, l'espressione dell'operatore ternario è più concisa dell'istruzione if-else. Pertanto, puoi usarlo per verificare le condizioni e valutare le espressioni in modo condizionale al volo.
Nell'esempio seguente, nums
è un elenco di 100 numeri interi generati casualmente. Per ciascuno dei 100 numeri, controlliamo se è pari o dispari. E questa valutazione avviene in linea all'interno della stringa f.
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
L'operatore ternario richiede la clausola Else
Quando utilizzi le istruzioni condizionali if-else, la clausola else è facoltativa. Facciamo un esempio. La variabile game_over
è impostata su True
se l' energy
scende a un valore inferiore o uguale a zero.
Tuttavia, se l' energy
è maggiore di zero, la variabile game_over
non viene mai inizializzata. Quindi ti imbatterai in errori se provi ad accedere alla variabile game_over
.
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
Un modo per risolvere questo problema è impostare inizialmente game_over
su False
e aggiornarlo su True
se il livello di energia è inferiore o uguale a zero.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Tuttavia, quando si utilizza l'operatore ternario Python equivalente a quello precedente, la clausola else non è facoltativa. L'operatore ternario richiede che l'espressione venga valutata quando la condition
è False
.
game_over = True if energy <= 0 else False
Se modifichi quanto sopra in game_over = True if energy <= 0
rimuovendo la parte else, ti imbatterai in un errore di sintassi, come mostrato:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Per verificare più condizioni, utilizzare istruzioni If-Else
Considera l'esempio: ogni domanda in una serie di domande di intervista sulla codifica ha un punteggio di difficoltà associato. A seconda di questo punteggio, assegniamo a una determinata domanda uno dei tre livelli di difficoltà: facile, medio o difficile. Supponiamo di avere quanto segue:
Punto | Livello di difficoltà |
Meno di 10 | facile |
Tra le 10 e le 20 | medio |
Maggiore di 20 | difficile |
Dato il punteggio di difficoltà, puoi ottenere il suo livello di difficoltà usando l'operatore ternario Python come mostrato:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
L'espressione dell'operatore ternario nel blocco di codice precedente è della seguente forma:
expression1 if condition1 else expression2 if condition2 else expression3
Anche se conciso, è un po' difficile da leggere e analizzare. L'immagine seguente mostra come si verifica il flusso di controllo in questo caso.
Il seguente frammento di codice mostra un'implementazione equivalente utilizzando le istruzioni if-else. Come visto, il flusso di controllo è molto più facile da capire e il codice è più leggibile.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Pertanto, quando hai più condizioni, dovresti usare i blocchi if-else invece dell'operatore ternario. Ciò garantisce che il codice sia di facile lettura e comprensione.
Inoltre, quando devi eseguire più istruzioni, a seconda che la condizione sia vera o falsa, dovresti prendere in considerazione l'utilizzo dell'istruzione if-else.
Conclusione
Ecco un riepilogo di ciò che hai imparato in questo tutorial.
- In Python, l'operatore ternario può essere utilizzato con la seguente sintassi:
expression1 if condition else expression2
. - Puoi emulare il comportamento dell'operatore ternario usando tuple e dizionari Python.
- Mentre l'operatore ternario può essere un'alternativa più concisa ai blocchi if-else, dovresti assicurarti che il codice sia leggibile. Per migliorare la leggibilità del codice, puoi utilizzare le istruzioni if-else invece dell'operatore ternario, soprattutto quando devi concatenare più condizioni.
Successivamente, impara a dare un'occhiata al tutorial sugli operatori uguali e non uguali in Python.