Come usare l'operatore ternario di Python

Pubblicato: 2023-01-04

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 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

operatore-ternario-python-1

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.

ternario-op-ex1

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>) 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 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?

Dovresti usare sempre 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.

esempio di operatore ternario

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.