Guido van Rossum
Die neue Implementierung ähnelt stark dem in Scala, Rust und F# bereitgestellten „Match“-Operator, der das Ergebnis eines angegebenen Ausdrucks mit einer Liste von Mustern vergleicht, die in Blöcken basierend auf dem „Case“-Operator aufgelistet sind. Im Gegensatz zum „switch“-Operator, der in C, Java und JavaScript verfügbar ist, bieten „match“-basierte Ausdrücke viel mehr
def http_error(status):
Spielstatus:
Fall 400:
return „Bad request“
Fall 401|403|404:
Rückgabe „Nicht erlaubt“
Fall 418:
return „Ich bin eine Teekanne“
Fall _:
„Etwas anderes“ zurückgeben
Sie können beispielsweise Objekte, Tupel, Listen und beliebige Sequenzen entpacken, um Variablen basierend auf vorhandenen Werten zu binden. Es ist erlaubt, verschachtelte Vorlagen zu definieren, zusätzliche „if“-Bedingungen in der Vorlage zu verwenden, Masken („[x, y, *rest]“) und Schlüssel/Wert-Zuordnungen (z. B. {„bandwidth“: b, „latency“) zu verwenden ”: l} zum Extrahieren von „Bandbreiten“- und „Latenz“-Werten und Wörterbuch), zum Extrahieren von Untervorlagen („:="-Operator) und zum Verwenden benannter Konstanten in der Vorlage. In Klassen ist es möglich, das Matching-Verhalten mithilfe der Methode „__match__()“ anzupassen.
aus Datenklassen Datenklasse importieren
@Datenklasse
Klassenpunkt:
x:int
y:int
def whereis(point):
Matchball:
case Point(0, 0):
print("Herkunft")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("Irgendwo anders")
Fall _:
print("Kein Punkt")
Matchball:
case Point(x, y) wenn x == y:
print(f"Y=X bei {x}")
case Point(x, y):
print(f"Nicht auf der Diagonale")
ROT, GRÜN, BLAU = 0, 1, 2
passende Farben:
Fall .RED:
print("Ich sehe rot!")
Gehäuse .GRÜN:
print("Gras ist grün")
Etui .BLU
E:
print(„Ich fühle den Blues :(“)
Ein Satz wurde zur Überprüfung vorbereitet
Source: opennet.ru