Pattern Matching in Python: match/case Meglio di if/elif
Pattern Matching in Python: match/case Meglio di if/elif
Quando usarlo
Python 3.10+ introduce match/case
per sostituire lunghe catene di if/elif
. È perfetto per parsing di dati strutturati, state machines, o quando devi confrontare valori complessi. Rende il codice più leggibile e meno soggetto a errori rispetto ai classici if annidati.
Snippet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def elabora_risposta(response):
match response:
case {"status": "success", "data": data}:
return f"Successo: {data}"
case {"status": "error", "code": 404}:
return "Risorsa non trovata"
case {"status": "error", "code": code} if code >= 500:
return f"Errore server: {code}"
case {"status": status}:
return f"Status sconosciuto: {status}"
case _: # default
return "Formato non riconosciuto"
# Esempi d'uso
print(elabora_risposta({"status": "success", "data": "OK"}))
Perché funziona
match/case
fa pattern matching strutturale, non solo confronti di valori. Può estrarre parti di oggetti complessi, applicare condizioni con guard (if
), e gestire tipi diversi in modo elegante. È più espressivo di if/elif
e spesso più performante grazie alle ottimizzazioni del compiler.
Attenzione a…
- Disponibile solo da Python 3.10+ - controlla la versione prima di usarlo
- I pattern sono valutati in ordine - il primo match vince
- Usa sempre
case _:
come fallback per evitare eccezioni non gestite
Vedi anche
isinstance()
per controlli di tipo tradizionalityping.Union
per type hints con alternative- PEP 634 - Pattern Matching
This post is licensed under CC BY 4.0 by the author.