Guido van Rossum
Den nye implementeringen ligner mye på "match"-operatoren i Scala, Rust og F#, som sammenligner resultatet av et spesifisert uttrykk med en liste over mønstre oppført i blokker basert på "case"-operatoren. I motsetning til "switch"-operatoren tilgjengelig i C, Java og JavaScript, tilbyr "match"-baserte uttrykk mye mer
def http_error(status):
kampstatus:
sak 400:
returner "Dårlig forespørsel"
sak 401|403|404:
returner "Ikke tillatt"
sak 418:
returner "Jeg er en tekanne"
sak_:
returner "Noe annet"
Du kan for eksempel pakke ut objekter, tupler, lister og vilkårlige sekvenser for å binde variabler basert på eksisterende verdier. Det er tillatt å definere nestede maler, bruke ytterligere "hvis"-betingelser i malen, bruke masker ("[x, y, *rest]"), nøkkel-/verditilordninger (for eksempel {"båndbredde": b, "latency" ”: l} for å trekke ut verdier for "båndbredde" og "latency" og ordbok), trekke ut undermaler (":=" operator), bruk navngitte konstanter i malen. I klasser er det mulig å tilpasse samsvarsatferd ved å bruke "__match__()"-metoden.
fra dataklasser importer dataklasse
@dataklasse
klasse poeng:
x:int
y:int
def whereis (punkt):
match poeng:
case Point(0, 0):
print("Opprinnelse")
sakspunkt(0, y):
print(f"Y={y}")
kasuspunkt(x, 0):
print(f"X={x}")
sakspunkt():
print("Et annet sted")
sak_:
print("Ikke et poeng")
match poeng:
kasuspunkt(x, y) hvis x == y:
print(f"Y=X ved {x}")
sakspunkt(x, y):
print(f"Ikke på diagonalen")
RØD, GRØNN, BLÅ = 0, 1, 2
match farge:
etui .RED:
print ("Jeg ser rødt!")
sak .GRØNN:
print("Gress er grønt")
etui .BLU
E:
print(“I'm feeling the blues :(“)
Det er utarbeidet et sett for gjennomgang
Kilde: opennet.ru