Vai al contenuto principale

Guida agli operatori ternari in Python: aumenta l'efficienza del codice

Scopri come migliorare le tue competenze di Python usando gli operatori ternari per produrre codice più efficiente e leggibile. In più, suggerimenti per snellire le istruzioni condizionali.
· 11 min leggi

Scopri con l'IA

Le competenze in Python sono fondamentali per lavorare con i dati, sia che tu stia analizzando dataset sia che stia costruendo modelli complessi. Un buon codice Python è facile da capire e da gestire, ma le cose possono complicarsi quando aggiungi delle condizioni. È qui che gli operatori ternari tornano utili.

Gli operatori ternari sono come una scorciatoia che ti aiuta a mantenere il codice pulito e chiaro.

In questo articolo, vedremo nel dettaglio gli operatori ternari, con esempi che mostrano come usarli nel tuo codice. Inoltre, discuteremo i pro e i contro del loro utilizzo.

Cosa sono gli operatori ternari in Python?

La parola “ternario” significa “composto da tre parti”. L'operatore ternario prende questo nome perché coinvolge tre operandi:

  • Una condizione
  • Un'espressione da eseguire se la condizione è True
  • Un'altra espressione da eseguire se la condizione è False.

Nella letteratura di programmazione, puoi trovare gli operatori ternari con nomi diversi: Operatore condizionale, Ternary If e Inline If (IIF).

Gli operatori ternari non sono esclusivi di Python. Linguaggi come Java, JavaScript e C hanno anch'essi le loro versioni. Anche se possono differire leggermente nella sintassi, condividono la stessa funzionalità di base. Spieghiamo con un esempio semplice.

Immagina di dover prendere una decisione, per esempio se andare in spiaggia o restare a casa. Potresti basare questa decisione sul meteo. Se c'è il sole, vai in spiaggia; se piove, resti a casa. In un if-else, sarebbe così:

if weather=="sunny":	print("Go to the beach")else:	print("Stay home")

Ora, traduciamo questo processo decisionale in un'operazione ternaria:

Se c'è il sole, vai in spiaggia (x), altrimenti (else) resti a casa (y).

Quindi, in Python con il ternario, sarebbe così:

Entrambi i casi sono corretti. Quale pensi che sia più pulito all'interno del codice Python?

La sintassi di base degli operatori ternari in Python

Operatori ternari in Python

Approfondiamo ora e analizziamo nel dettaglio gli operatori ternari. La forma generale degli operatori ternari in Python è la seguente:

Condizione

La condizione in un operatore ternario Python può essere qualsiasi espressione che restituisca un valore booleano (True o False). Questa espressione può coinvolgere operatori di confronto o relazionali (<,>,==,!=), operatori logici (AND logico, OR logico e NOT logico), chiamate di funzione o qualsiasi altra operazione che produca un valore booleano.

Ad esempio, la condizione potrebbe essere:

  • Un confronto semplice: x < 100
  • Una combinazione di confronti: x < 10 and y > 25
  • Una chiamata di funzione: is_numer(value)
  • Un'espressione logica: x > 0 or y < 0

L'importante è che la condizione venga valutata a True o False, in base alla logica che vuoi implementare. Il risultato dell'operatore ternario dipenderà da come questa condizione viene valutata.

result_if_true

Questa parte dell'operatore ternario è spesso chiamata "risultato se vero" o "valore se vero". Rappresenta l'azione o il valore da eseguire o assegnare quando la condizione valutata è True.

  • Una variabile: x
  • Un valore costante: 10
  • Una chiamata di funzione: calculate_value()
  • Un'espressione aritmetica: x-1, x * 2
  • Qualsiasi altra espressione Python valida che restituisca un valore

La parte result_if_true ti consente di specificare l'esito o il valore desiderato quando la condizione è soddisfatta o valutata a True.

result_if_False

Analogamente alla parte "risultato se vero", la parte "risultato se falso" può essere qualsiasi espressione o valore Python valido, ad esempio:

  • Una variabile: y
  • Un valore costante: 0
  • Una chiamata di funzione: get_value()
  • Un'espressione aritmetica: y + 2
  • Qualsiasi altra espressione Python valida che restituisca un valore

Questa flessibilità ti consente di specificare risultati o valori diversi in base al fatto che la condizione sia soddisfatta o meno.

Nella sezione seguente, rivedrò esempi che coprono la maggior parte delle combinazioni di condition, result_if_True e result_if_False.

Come usare gli operatori ternari in Python

Gli operatori ternari offrono un modo conciso per esprimere la logica condizionale non solo in semplici istruzioni if-else, ma anche in altre strutture Python come tuple e dizionari.

Operatori ternari nelle istruzioni if-else

Per gli operatori ternari, assicurati che la condizione valuti a True o False. I seguenti esempi mostrano come gli operatori ternari possano gestire tipi di dati diversi contemporaneamente nelle loro tre parti. Questa flessibilità li rende utili per combinare varie tipologie di informazioni in un'unica espressione.

Condizione: confronto, Risultato se True: variabile, Risultato se False: variabile

#the result will be x if x is less than y otherwise it will be yx = 3y = 5result = x if x < y else y

Condizione: appartenenza, Risultato se True: costante, Risultato se False: costante

# the result will be “Element is present” if the element exists in my_list otherwise it will be "Element is not present"my_list = [1, 2, 3, 4, 5]element = 6result = "Element is present" if element in my_list else "Element is not present"

Condizione: logica, Risultato se True: costante, Risultato se False: costante

# the result will be “Even” if the mod of X is 0 otherwise the result will be “Odd”x = 5result = "Even" if x % 2 == 0 else "Odd"

Condizione: logica, Risultato se True: aritmetica, Risultato se False: aritmetica

# if x is less than y the results will be the sum of x and y otherwise the result will be the subtraction. x = 5y = 7result = x + y if x < y else x - y

Condizione: logica, Risultato se True: variabile, Risultato se False: funzione

# in case x is not None value, the result is x otherwise it is the output of the get_defult values function, which is “Default”def get_default_value():    return "Default"x = Noneresult = x if x is not None else get_default_value()

Condizione: funzione, Risultato se True: espressione aritmetica, Risultato se False: funzione

# If the customer_type is not "Regular”, the get_discount function will be called with customer_type as an argument; otherwise, the discount will be set to 0.def get_discount(customer):    return 10 if customer == "VIP" else 5customer_type = "Regular"discount = get_discount(customer_type) if customer_type != "Regular" else 0

Condizione: logica, Risultato se True: funzione, Risultato se False: funzione

# in case a  is less than b print the value “a is greater” otherwise print “b is greater”a=100b=200print(a,"is greater") if (a>b) else print(b,"is greater")

Operatori ternari annidati

L'operatore ternario annidato in Python ti permette di combinare più espressioni condizionali all'interno di un unico operatore ternario. Questo può essere particolarmente utile quando devi valutare più condizioni e restituire risultati diversi in base a ciascuna condizione.

Consideriamo un esempio in cui vogliamo determinare la categoria di un numero dato in base al suo valore:

num = 15size= "Small" if num < 4 else ("Medium" if num < 10 else "Large")

In questo esempio:

  • L'operatore ternario esterno verifica se il numero è minore di 4. Se lo è, assegna la categoria "Small".
  • Se il numero non è minore di 10, l'operatore ternario interno verifica se il numero è minore di 10. Se lo è, assegna la categoria "Medium"
  • Se nessuna delle condizioni è soddisfatta, viene assegnata la categoria "Large".

Operatori ternari con le tuple

Gli operatori ternari possono essere usati all'interno delle tuple per selezionare valori in base a una condizione. Ad esempio:

value = (x if condition else y)

Tuttavia, esiste un modo più sofisticato per applicare gli operatori ternari alle tuple. Questo metodo sfrutta le capacità di indicizzazione delle tuple per eseguire operazioni condizionali. Combinati con le tuple, sequenze immutabili di elementi, gli operatori ternari consentono espressioni condizionali compatte e leggibili.

Nel contesto delle tuple, l'operatore ternario seleziona uno di due valori in base a una condizione e lo restituisce. Questo si ottiene indicizzando la tupla usando il risultato della condizione come indice. Se la condizione è True, in Python True = 1, viene restituito l'elemento all'indice 1 (corrispondente a result_if_true); altrimenti, viene restituito l'elemento all'indice 0 (corrispondente a result_if_false).

Questo approccio può aiutare a eseguire semplici assegnazioni o valutazioni condizionali all'interno delle espressioni. Tuttavia, assicurati che il codice rimanga leggibile e comprensibile.

Esempio:

a, b = 1, 5print((a, b)[a < b])
  • (a, b): Crea una tupla (a, b) con due elementi, dove a è il primo elemento e b è il secondo. In Python l'indicizzazione parte da 0. Quindi a ha indice 0 e b ha indice 1.
  • [a < b]: È un'operazione di indicizzazione. Se a è minore di b, valuta a True, equivalente a 1 in Python. Se a non è minore di b, valuta a False, equivalente a 0 in Python.
  • Questa operazione di indicizzazione seleziona quindi il primo o il secondo elemento della tupla in base al risultato del confronto a < b.
  • Poiché a è 1 e b è 5, a < b valuta a True, cioè 1. Quindi viene selezionata l'espressione b e viene stampato 5.

Operatori ternari con i dizionari

Il concetto di utilizzo dell'indicizzazione, come visto con le tuple, può essere esteso anche ai dizionari. Tuttavia, a differenza delle tuple, i dizionari non hanno un indice tradizionale in Python. Invece, i dizionari usano le proprie chiavi per accedere e recuperare i valori.

Le chiavi dei dizionari svolgono un ruolo simile agli indici, permettendo il recupero efficiente dei valori associati a chiavi specifiche. Le chiavi dei dizionari sono simili alle tuple in quanto entrambe sono immutabili, cioè non possono essere modificate internamente senza cambiare l'identità del dizionario.

a, b = 1, 5result= {True: a, False: b} [a < b]
  • Questo codice è un'espressione di dizionario combinata con una ricerca per chiave-valore.
  • {True: a, False: b}: Crea un dizionario con due coppie chiave-valore.
  • Se la condizione [a < b] è True, associa la chiave True al valore a; se la condizione è False, associa la chiave False al valore b.

Vantaggi e svantaggi degli operatori ternari in Python

Gli operatori ternari hanno pro e contro, come qualsiasi strumento. È importante conoscere entrambi gli aspetti per trovare il giusto equilibrio e usarli in modo efficace.

Per prima cosa, esploriamo i vantaggi dell'uso degli operatori ternari di Python:

  • Il codice sarà breve e chiaro.
  • Il codice sarà più facile da leggere e capire perché è più conciso.
  • Sono comodi quando devi assegnare valori in base a determinate condizioni.
  • Non solo il codice appare più pulito, ma può anche essere più veloce, perché non deve verificare così tante opzioni.

Gli svantaggi dell'uso degli operatori ternari di Python sono i seguenti:

  • Gli operatori ternari potrebbero non essere ideali per scenari che richiedono condizioni multiple.
  • Operatori ternari complessi e annidati possono portare a confusione ed errori.
  • Un uso eccessivo degli operatori ternari può rendere il codice troppo complesso e difficile da comprendere e mantenere.
  • Il flusso logico di codice con operatori ternari complessi può non essere chiaro, rendendo il debugging estremamente impegnativo e complicando l'identificazione e la correzione degli errori.

Best practice per gli operatori ternari

Ovviamente, come per qualsiasi strumento, ci sono delle sfide nell'utilizzarli. Tieni a mente queste best practice quando li usi nel tuo codice:

  • Usali con criterio: Condizioni complesse negli operatori ternari possono rendere il codice difficile da leggere. Suddividile in istruzioni if-else quando serve.
  • Non esagerare con l'annidamento: Annidare troppi operatori ternari crea confusione. Mantieni le cose semplici e lineari.
  • Testa a fondo: Assicurati che il codice con operatori ternari funzioni come previsto in scenari diversi.
  • Spiega la logica: Aggiungi commenti per chiarire cosa fa l'operatore ternario, così la manutenzione del codice è più semplice.
  • Sii coerente: Usa gli operatori ternari nello stesso modo in tutto il codice per uno stile pulito e leggibile.
  • Gestisci gli errori: Prevedi come gestire situazioni inattese quando usi gli operatori ternari.

Sviluppa le tue competenze in Python

Gli operatori ternari sono delle piccole gemme in Python. Ti permettono di scrivere codice snello ed efficiente condensando una logica condizionale complessa in una singola, elegante riga.

Adottare gli operatori ternari non solo migliora la leggibilità del codice, ma riflette anche una comprensione più profonda della sintassi espressiva di Python. Continuando il tuo percorso con Python, sfruttare questa forma compatta di espressione condizionale affinerà le tue abilità e porterà a script più rifiniti e puliti.

Ecco alcuni link per aiutarti a sviluppare le tue competenze in Python e salire di livello, un passo alla volta.

FAQ

Cos'è un operatore ternario in Python?

Un operatore ternario è un'espressione condizionale che valuta una condizione e restituisce uno di due valori in base al fatto che la condizione sia vera o falsa. La sintassi di un operatore ternario in Python è value_if_true if condition else value_if_false. Valuta prima la condizione; se è vera, restituisce value_if_true; altrimenti restituisce value_if_false

Quali sono i vantaggi dell'uso degli operatori ternari?

Gli operatori ternari rendono il codice più compatto e più facile da capire a colpo d'occhio. Riducendo il numero di righe, migliorano la leggibilità per condizioni semplici.

Quali sono gli svantaggi dell'uso degli operatori ternari?

Gli operatori ternari possono migliorare la leggibilità del codice per condizioni semplici, ma possono renderlo più difficile da leggere in presenza di condizioni complesse o operazioni annidate. Un uso eccessivo può rendere il codice difficile da comprendere.

Quando dovresti evitare di usare gli operatori ternari?

Evita di usare operatori ternari per condizioni complesse o quando l'espressione diventa difficile da capire. Se il codice perde leggibilità, usa invece le tradizionali istruzioni if-else.

Rayan Yassminh

Autore

Rayan Yassminh

Data Scientist/Analyst versatile, che unisce competenze in analisi quantitativa e tecnologie all’avanguardia. Con un dottorato in Geofisica e titoli post-laurea in Intelligenza Artificiale e Data Science, Rayan mette a frutto le sue solide capacità di problem solving per ricavare insight azionabili da dataset complessi. I contributi di ricerca di Rayan spaziano in vari ambiti, a dimostrazione della sua capacità di applicare tecniche avanzate per affrontare sfide del mondo reale.

Argomenti

Correlato