Come usare l’operatore ternario di Python

Questa 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 winadmin.it.

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 dell’energia sia o meno minore o uguale a zero.

  • Se energia <= 0, game_over è vero.
  • 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, l’energia è -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:

  • condizione: la condizione da verificare.
  • expression1: l’espressione da valutare se la condizione è True.
  • expression2: l’espressione da valutare se la condizione è False.

Ora identificheremo quale espressione1, espressione2 e condizione 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] fornisce 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) è falso.
  • bool() restituisce True.
>>> 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 utilizzare quando la condizione è False.
  • Elemento all’indice 1 nella tupla: il valore da utilizzare quando la condizione è vera.

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 condizione è True. E expression2 viene valutato quando la condizione è 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] restituisce 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’energia scende a un valore inferiore o uguale a zero.

Tuttavia, se l’energia è 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 condizione è 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:

PunteggioLivello di difficoltàMeno di 10facileTra 10 e 20 medioPiù di 20difficile

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.