Guido van Rossum schlug vor, Mustervergleichsoperatoren zu Python hinzuzufĂŒgen

Guido van Rossum eingefĂŒhrt Entwurf zur ÜberprĂŒfung durch die Gemeinschaft Spezifikationen zur Implementierung von Mustervergleichsoperatoren (Match und Case) in Python. Es ist zu beachten, dass VorschlĂ€ge zur HinzufĂŒgung von Mustervergleichsoperatoren bereits in den Jahren 2001 und 2006 veröffentlicht wurden (pep-0275, pep-3103), wurden aber zugunsten der Optimierung des „if ... elif ... else“-Konstrukts zum Kompilieren passender Ketten abgelehnt.

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 große FunktionalitĂ€t. Es wird darauf hingewiesen, dass die vorgeschlagenen Operatoren die Lesbarkeit des Codes verbessern, den Vergleich beliebiger Python-Objekte und das Debuggen vereinfachen und aufgrund der Möglichkeit der Erweiterung auch die ZuverlĂ€ssigkeit des Codes erhöhen Statische TypprĂŒfung.

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 Patches mit experimentell Implementierung vorgeschlagene Spezifikation, aber die endgĂŒltige Version ist noch diskutiert wird. Zum Beispiel vorgeschlagen Verwenden Sie anstelle des Ausdrucks „case _:“ fĂŒr den Standardwert das SchlĂŒsselwort „else:“ oder „default:“, da „_“ in anderen Kontexten als temporĂ€re Variable verwendet wird. Fraglich ist auch die interne Organisation, die auf der Übersetzung neuer AusdrĂŒcke in Bytecode basiert, Ă€hnlich dem, der fĂŒr „if ... elif ... else“-Konstrukte verwendet wird, was bei der Verarbeitung sehr großer Vergleichsmengen nicht die gewĂŒnschte Leistung bietet.

Source: opennet.ru

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz und VPS-VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster