back to top

Switch in Python (usando match – case)

Il case switch è una struttura di controllo comune a molti linguaggi di programmazione (come Java e C++) che permette di eseguire operazioni diverse in base al valore di una variabile che viene utilizzata come controllo.

Fino alla versione 3.10, Python non aveva una funzionalità integrata per implementare gli switch statement, quindi i programmatori dovevano necessariamente fare ricorso a if ed elif per realizzare istruzioni condizionali in grado di prevedere i diversi valori della variabile di controllo.

Fortunatamente con l’introduzione del "structural pattern matching" ora è possibile implementare uno switch in Python utilizzando le parole chiave match e case.

In questa lezione vedremo come simulare uno switch in Python in modo deltutto simile ale strutture dei linguaggi menzionati in precedenza.

Creare una struttura condizionale con if ed elif

Supponiamo di dover verificare il valore di una variabile "giorno" e di stampare un testo diverso a seconda del suo valore. 1 corrisponderà a "Lunedì", 2 a "Martedì" e così via. Supponiamo anche di dover stampare un messaggio di errore nel caso in cui il valore sia diverso da 1, 2, 3, 4, 5, 6 o 7.

Ecco un esempio usando una struttra condizionale del tipo if – elif:

giorno = 3

if giorno == 1:
  print("Lunedì")
elif giorno == 2:
  print("Martedì")
elif giorno == 3:
  print("Mercoledì")
elif giorno == 4:
  print("Giovedì")
elif giorno == 5:
  print("Venerdì")
elif giorno == 6:
  print("Sabato")
elif giorno == 7:
  print("Domenica")
else:
  print("Giorno non valido")

In questo codice, come già anticipato, controlliamo il valore della variabile "giorno" e stampiamo il nome del giorno della settimana corrispondente, oppure "Giorno non valido" se la variabile non contiene un valore valido.

Creare uno switch case in Python

Come detto, a partire dalla versione 3.10, Python offre la possibilità di "riscrivere" questa struttura in modo più "elegante"  utilizzando il costrutto match – case col quale è possibile simulare uno switch case.

La sintassi di match – case

match variabile:
  case valore-1:
    azione-1
  case valore-2:
    azione-2
  case valore-3:
    azione-3
  case _:
    azione-default

Nota che il simbolo underscore (_) viene utilizzato per definire il caso di default dello switch statement in Python.

Un esempio di switch case in Python

def switch(giorno):
  match giorno:
    case 1:
      return "Lunedì"
    case 2:
      return "Martedì"
    case 3:
      return "Mercoledì"
    case 4:
      return "Giovedì"
    case 5:
      return "Venerdì"
    case 6:
      return "Sabato"
    case 7:
      return "Domenica"
    case _:
      return "Giorno non valido"

Possiamo richiamare il nostro switch in questo modo:

print(switch(1))
print(switch(5))
print(switch(8))

Il risultato sarà:

Lunedì
Venerdì
Giorno non valido

In questo esempio, abbiamo definito una funzione "switch" che restituisce il nome del giorno della settimana corrispondente al valore della variabile "giorno". La funzione utilizza la sintassi match-case per eseguire operazioni diverse in base al valore di "giorno". Se la variabile contiene uno dei valori previsti, la funzione restituisce il nome del giorno della settimana corrispondente. In caso contrario, viene restituito il messaggio "Giorno non valido".

Conclusioni

In entrambi gli esempi, abbiamo utilizzato una struttura di controllo di flusso per gestire condizioni diverse in base al valore assunto da una singola variabile di controllo.

La sintassi if-elif, già a prima vista, appare meno efficente rispetto alla sintassi match-case. La sintassi match-case è più moderna e offre una soluzione più "pulita", ma non è supportata dalle versioni più vecchie di Python.

In sintesi, gli switch statement in Python possono essere implementati utilizzando la sintassi if-elif o match-case. La scelta della sintassi dipende dalla versione di Python utilizzata e dallo stile di programmazione preferito.

Pubblicità
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.