Guido van Rossum
Den nye implementering minder meget om "match"-operatoren i Scala, Rust og F#, som sammenligner resultatet af et specificeret udtryk med en liste over mønstre opført i blokke baseret på "case"-operatoren. I modsætning til "switch"-operatoren, der er tilgængelig i C, Java og JavaScript, tilbyder "match"-baserede udtryk meget mere
def http_error(status):
kampstatus:
sag 400:
returner "Dårlig anmodning"
sag 401|403|404:
returner "Ikke tilladt"
sag 418:
returnere "Jeg er en tekande"
sag_:
returnere "Noget andet"
For eksempel kan du pakke objekter, tupler, lister og vilkårlige sekvenser ud for at binde variabler baseret på eksisterende værdier. Det er tilladt at definere indlejrede skabeloner, bruge yderligere "hvis"-betingelser i skabelonen, bruge masker ("[x, y, *rest]"), nøgle-/værditilknytninger (f.eks. {"båndbredde": b, "latency" ”: l} for at udtrække "båndbredde" og "latency" værdier og ordbog), udtræk underskabeloner (":=" operator), brug navngivne konstanter i skabelonen. I klasser er det muligt at tilpasse matchningsadfærd ved hjælp af "__match__()" metoden.
fra dataklasser importer dataklasse
@dataklasse
klasse punkt:
x:int
y:int
def whereis(punkt):
matchbold:
case Point(0, 0):
print ("Oprindelse")
case Point(0, y):
print(f"Y={y}")
case Punkt(x, 0):
print(f"X={x}")
case Point():
print("Et andet sted")
sag_:
print("Ikke et punkt")
matchbold:
case Punkt(x, y) hvis x == y:
print(f"Y=X ved {x}")
case Punkt(x, y):
print(f"Ikke på diagonalen")
RØD, GRØN, BLÅ = 0, 1, 2
match farve:
sag .RED:
print ("Jeg ser rødt!")
sag .GRØN:
print("Græs er grønt")
sag .BLU
E:
print(“Jeg mærker blues :(“)
Der er udarbejdet et sæt til gennemgang
Kilde: opennet.ru