Guido van Rossum
La nuova implementazione è molto simile all'operatore "match" fornito in Scala, Rust e F#, che confronta il risultato di un'espressione specificata con un elenco di modelli elencati in blocchi in base all'operatore "case". A differenza dell'operatore "switch" disponibile in C, Java e JavaScript, le espressioni basate su "match" offrono molto di più
def http_errore(stato):
stato della partita:
caso 400:
restituire "Richiesta errata"
caso 401|403|404:
ritorna "Non consentito"
caso 418:
return "Sono una teiera"
caso _:
return "Qualcos'altro"
Ad esempio, puoi decomprimere oggetti, tuple, elenchi e sequenze arbitrarie per associare variabili in base a valori esistenti. È consentito definire modelli nidificati, utilizzare condizioni "if" aggiuntive nel modello, utilizzare maschere ("[x, y, *rest]"), mappature chiave/valore (ad esempio, {"bandwidth": b, "latency ”: l} per estrarre i valori e il dizionario "larghezza di banda" e "latenza"), estrarre i modelli secondari (":=" operatore), utilizzare costanti con nome nel modello. Nelle classi è possibile personalizzare il comportamento di abbinamento utilizzando il metodo “__match__()”.
da classi di dati import classe di dati
@dataclass
Punto di classe:
x:int
y:int
def dov'è(punto):
match point:
caso Punto(0, 0):
stampa("Origine")
caso Punto(0, y):
print(f"Y={y}")
caso Punto(x, 0):
stampa(f"X={x}")
caso Punto():
print("Da qualche altra parte")
caso _:
print("Non è questo il punto")
match point:
caso Punto(x, y) se x == y:
print(f"Y=X alle {x}")
caso Punto(x, y):
print(f"Non sulla diagonale")
ROSSO, VERDE, BLU = 0, 1, 2
abbinare il colore:
caso .RED:
print("Vedo rosso!")
caso .VERDE:
print("L'erba è verde")
caso .BLU
E:
print("Mi sento triste :(")
È stato preparato un set per la revisione
Fonte: opennet.ru