Python Switch Case Statement: Una guida per principianti

Python, a differenza di alcuni altri linguaggi di programmazione, non includeva un’istruzione switch case tradizionale fino alla versione 3.10. In questo tutorial, esploreremo come funziona l’equivalente dello switch case in Python e come può essere implementato utilizzando la caratteristica di pattern matching strutturale di Python.

Comprendere le istruzioni Switch Case tradizionali

Prima di Python 3.10, gli sviluppatori Python dovevano usare più istruzioni if-elif-else o dizionari per simulare la funzionalità dello switch case. Ecco un esempio base utilizzando if-elif-else:

day = input("Enter the day of the week: ").capitalize() if day == "Saturday" or day == "Sunday": print(f"{day} is a weekend.") elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]: print(f"{day} is a weekday.") else: print("That's not a valid day of the week.")
Saturday is a weekend.

Introduzione di Match e Case in Python 3.10

Con Python 3.10, sono stati introdotti l’istruzione match e le keyword case, fornendo una soluzione più elegante simile alle istruzioni switch case tradizionali in altri linguaggi.

Comprendere la sintassi di base

Consideriamo uno scenario in cui vogliamo categorizzare i giorni della settimana in categorie di fine settimana o giorni feriali, e anche identificare un giorno specifico. Ecco come possiamo usare l’istruzione match:

day = input("Enter the day of the week: ").capitalize() match day: case "Saturday" | "Sunday": print(f"{day} is a weekend.") case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday": print(f"{day} is a weekday.") case _: print("That's not a valid day of the week.")
Monday is a weekday.
  • Input dell’utente e metodo capitalize(): Iniziamo prendendo l’input dell’utente per il giorno della settimana e utilizziamo il metodo capitalize() per formattarlo correttamente (prima lettera maiuscola, altre minuscole).
  • Utilizzo dell’istruzione match: Usiamo quindi match per valutare la variabile day.
  • Corrispondenza dei Modelli con case:
    • Il primo case controlla se l’input è “Saturday” o “Sunday”. Il simbolo “|”, noto anche come operatore OR bit a bit, è usato per la corrispondenza di uno qualunque dei modelli multipli. Se l’input è uno di questi, stampa che il giorno è fine settimana.
    • Il secondo caso copre tutti i giorni feriali controllando ciascuno di essi. Se l’input corrisponde a un giorno feriale, stampa che il giorno è un giorno feriale.
  • Il Caso di Fallback (_): L’ultimo caso agisce come predefinito (`else` statement), catturando qualsiasi input che non corrisponde ai giorni conosciuti, indicando un input non valido.
  • Nessuna Dichiarazione di interruzione: Notate che non abbiamo bisogno di usare break dopo ogni caso. Python esce automaticamente dalla dichiarazione di confronto dopo una corrispondenza riuscita.

La sintassi match-case è più leggibile e concisa rispetto a una serie di istruzioni if-elif-else.

Usi Avanzati di Match e Case in Python

Applicazioni per la scienza dei dati

La dichiarazione match-case di Python può essere estremamente utile nelle attività di preprocessamento dati nella scienza dei dati. Il preprocessamento spesso coinvolge la categorizzazione dati in diversi gruppi in base a criteri specifici.

Ad esempio, in un insieme di dati sugli animali, potreste volerli categorizzare in base alla loro classe come mammiferi, uccelli, rettili, ecc. Ecco un esempio semplificato:

animal = "Eagle" match animal: case "Eagle" | "Parrot": print("Bird") case "Lion" | "Tiger": print("Mammal") case "Python" | "Crocodile": print("Reptile") case _: print("Unknown Class")
Bird

Questa approccio semplifica la logica if-else complessa e rende il codice più leggibile e facile da mantenere, specialmente quando si gestiscono grandi insiemi di dati con molte categorie.

Scenari di apprendimento automatico

Nell’apprendimento automatico, la gestione di diversi tipi di input dati è fondamentale. La struttura match-case può essere utilizzata per l’estrazione delle caratteristiche o per l’inferenza del modello. Per esempio, in un modello di apprendimento automatico che predice condizioni meteorologiche, la match-case può essere utilizzata per categorizzare i range di temperatura in ‘Freddo’, ‘Caldo’, ‘Caldo’, che poi possono essere utilizzati come feature di input per il modello.

Pitfalls e migliori pratiche per il Switch Case di Python

Suggerimenti per il debug

Un errore comune nella utilizzazione di match-case in Python è dimenticare di includere il carattere underscore (_) per il caso predefinito, simile all”else’ nelle dichiarazioni if-else tradizionali. Questo può condurre a comportamenti imprevisti se nessuno dei casi specifici viene correttamente matchato. Includere sempre un caso predefinito per gestire i valori imprevisti o particolari.

Considerazioni sulla performance

Sebbene l’istruzione match-case sia uno strumento potente, il suo impatto sulle prestazioni del codice Python, in particolare nelle applicazioni su larga scala, deve essere considerato. In scenari con un gran numero di casi o con pattern matching complessi, le prestazioni possono potenzialmente essere influenzate. Profilare e testare il codice per le prestazioni in scenari reali è cruciale per comprendere e mitigare eventuali problemi di prestazioni.

Confronto tra Python Match-Case e il Tradizionale Switch-Case

Analisi comparativa

Il match-case di Python differisce significativamente dalle istruzioni switch-case tradizionali presenti in linguaggi come Java o C++. In Java, ad esempio, l’istruzione switch è limitata a corrispondere solo valori scalari (come interi e tipi enum), mentre il match-case di Python offre una capacità di pattern matching molto più flessibile, permettendo di corrispondere tipi di dati complessi, come sequenze e istanze di classi. Questo rende l’implementazione di Python più potente, ma richiede anche una comprensione più profonda dei concetti di pattern matching.

Guida alla transizione

Per i programmatori familiari con le istruzioni switch-case tradizionali in linguaggi come C++ o Java, il passaggio al match-case di Python richiede un cambiamento di mentalità dalla semplice corrispondenza di valori al pattern matching.

È importante capire che il match-case di Python è più di un semplice switch-case; è uno strumento versatile per de-costruire tipi di dati ed estrarre informazioni da strutture complesse. Praticare con diversi tipi di dati e pattern è fondamentale per padroneggiarne l’uso.

Conclusione

L’introduzione di match e case nelle versioni 3.10 di Python fornisce una funzione ansiata da tempo ai developers che sono familiarizzati con gli statementi switch case in altre lingue. Offre un modo pulito e conciso per gestire molteplici condizioni, migliorando la leggibilità e la manutenibilità del codice.

Potete leggere più informazioni su Funzioni in Python nel nostro tutorial completo e esplorare questo concetto e altri in nostro Corso Intermedio di Python.

Source:
https://www.datacamp.com/tutorial/python-switch-case