Guido van Rossum
Den nya implementeringen är ungefär som "match"-operatorn som tillhandahålls i Scala, Rust och F#, som jämför resultatet av ett specificerat uttryck med en lista med mönster listade i block baserat på "case"-operatorn. Till skillnad från "switch"-operatorn som finns i C, Java och JavaScript, erbjuder "match"-baserade uttryck mycket mer
def http_error(status):
matchstatus:
fall 400:
returnera "Dålig begäran"
fall 401|403|404:
returnera "Inte tillåtet"
fall 418:
returnera "Jag är en tekanna"
fall_:
returnera "Något annat"
Du kan till exempel packa upp objekt, tupler, listor och godtyckliga sekvenser för att binda variabler baserat på befintliga värden. Det är tillåtet att definiera kapslade mallar, använda ytterligare "om"-villkor i mallen, använda masker ("[x, y, *rest]"), nyckel-/värde-mappningar (till exempel {"bandwidth": b, "latency" ”: l} för att extrahera "bandbredd" och "latens" värden och ordbok), extrahera submallar (":=" operator), använd namngivna konstanter i mallen. I klasser är det möjligt att anpassa matchningsbeteendet med metoden "__match__()".
från dataklasser importera dataklass
@dataklass
klass poäng:
x:int
y:int
def whereis(punkt):
matchpunkt:
case Point(0, 0):
print("Ursprung")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("någon annanstans")
fall_:
print("Inte en poäng")
matchpunkt:
case Point(x, y) om x == y:
print(f"Y=X vid {x}")
fallpunkt(x, y):
print(f"Inte på diagonalen")
RÖD, GRÖN, BLÅ = 0, 1, 2
matcha färg:
fall .RED:
print("Jag ser rött!")
case .GREEN:
print("Gräs är grönt")
fall .BLU
E:
print(“I'm feeling the blues :(“)
En uppsättning har förberetts för granskning
Källa: opennet.ru