Die Syntax „match...case“ ähnelt der switch-Anweisung in anderen objektorientierten Sprachen und soll die Zuordnung von Strukturen zu Fällen erleichtern.
Lass uns anfangen.
Grammatik
Die „match...case“-Syntax lautet wie folgt:
def greeting(message):
match message.split():
case ["hello"]:
print("this message says hello")
case ["hello", name]:
print("This message is a personal greeting to {name}")
case _:
print("The message didn’t match with anything")
Nach dem Login kopieren
#🎜🎜 #Werfen wir einen Blick auf die Syntax, um zu sehen, wie sie funktioniert.
Die von uns erstellte Funktion akzeptiert einen Parameter namens message. Das Schlüsselwort match akzeptiert ein Objekt zum Vergleich der aufgelisteten Fälle.
In unserem Beispiel erhält das Schlüsselwort match eine Liste von Zeichenfolgen, die das Ergebnis der Operation message.split() ist. Nehmen wir zur weiteren Veranschaulichung an, wir rufen die Funktion wie folgt auf:
greeting("hello")
Nach dem Login kopieren
Die Funktion teilt diese Zeichenfolge zunächst in alle Leerzeichen auf und erstellt eine Liste. Für die obige Eingabe verwendet der Match-Operator die Liste [„hello“]. Anschließend vergleicht es die Liste mit jedem Fall. Unser erster Fall ist:
case ["hello"]
Nach dem Login kopieren
Unsere Eingabe stimmt genau damit überein, sodass der Code in diesem Fall die Ausführung fortsetzt.
Ausgabe:
this message says hello
Nach dem Login kopieren
Was passiert, wenn wir die Funktion so aufrufen: Greeting("Hallo George")?
Mit dieser Eingabe verwendet der Matching-Operator die Liste [„Hallo“, „George“], um alle Fälle zu vergleichen. Der erste Fall, case „hello“, stimmt nicht überein, da die Vergleichsliste zwei Elemente enthält und nicht nur eines.
Strukturübereinstimmung
Der Übereinstimmungsoperator stimmt mit der Struktur des gegebenen Ausdrucks überein, sodass unser erster Fall aufgrund der Länge des Fallausdrucks trotz des Vergleichs nicht übereinstimmt Ausdruck entspricht dem ersten Element in der Liste.
Der zweite Fall ist [„Hallo“, Name]. Das passiert, wenn unsere Eingaben übereinstimmen. Wenn Sie Python keinen passenden Literalwert zur Verfügung stellen, bindet es jeden Wert im Vergleichsausdruck an den Variablennamen im case-Ausdruck. In unserem Beispiel wird der Name also auf „George“ gesetzt. und dieser Fall stimmt überein (es hat „hello“ als erstes Element und es gibt auch ein Element, das an name gebunden ist), also ist die Ausgabe:
This message is a personal greeting to George
Nach dem Login kopieren
Jetzt versuchen wir so etwas wie das Aufrufen von Funktion: Begrüßung („Hallo George Johnson“).
Der Vergleichsausdruck wird zu [„Hallo“, „George“, „Johnson“]. Schauen wir uns nun jeden einzelnen Fall an. Der erste Fall schlägt fehl, weil der Vergleichsausdruck drei Elemente enthält und nicht 1. Der zweite Fall schlägt auf die gleiche Weise fehl; im zweiten Fall wird eine Liste der Länge 2 erwartet, bei der das erste Element „Hallo“ ist. Das erste Element ist eigentlich „Hallo“, aber der Vergleichsausdruck hat 3 Elemente, sodass dieser Fall nicht übereinstimmt.
Die einzige verbleibende Option ist die Groß-/Kleinschreibung mit Unterstrich. Dies ist die Standardschreibweise, die alles übereinstimmt. Stellen Sie sich das wie den Standardfall in einer Switch-Anweisung vor. Wenn der Vergleichsausdruck mit nichts anderem übereinstimmt, stimmt er immer mit der Schreibweise _ überein.
Unterstrich als letzter Fall. In diesem Fall wird kein Fall ausgeführt, da alle Fälle mit dem unterstrichenen Fall übereinstimmen. Dies ähnelt dem Schlüsselwort else in if...else. _ case stimmt mit allem überein, da Python _ als gültigen Variablennamen erkennt. Wenn wir also zum Beispiel die Groß-/Kleinschreibung [„Hallo“, Name] vergleichen, wird der Vergleichsausdruck an „_Name“ gebunden. In unserem speziellen Fall enthält die Variable _ die Werte [„Hallo“, „George“, „Johnson“].
In unserer neuesten Begrüßung für Funktionsaufrufe („Hallo George Johnson“) lautet die Ausgabe also:
The message didn’t match with anything
Nach dem Login kopieren
Erweiterte Verwendung
“match . Die „..case“-Syntax ist ein sehr leistungsfähiges Werkzeug zum Vergleich vieler verschiedener Ausdrücke und Werte. Wenn Sie Listen vergleichen, wie wir es im obigen Beispiel getan haben, stehen weitere Matching-Funktionen zur Verfügung.
In einem Case-Ausdruck können Sie Operatoren verwenden, um alle verbleibenden Elemente in Variablen zu packen. Zum Beispiel:
comparison_list = ["one", "two", "three"]
match comparison_list:
case [first]:
print("this is the first element: {first}")
case [first, *rest]:
print("This is the first: {first}, and this is the rest: {rest}")
case _:
print("Nothing was matched")
Nach dem Login kopieren
In diesem Codeausschnitt wird der zweite Fall abgeglichen und ausgeführt, und die Ausgabe lautet:
This is the first: one, and this is the rest: ["two", "three"]
Nach dem Login kopieren
Es ist auch möglich, Fälle aus zwei Fällen zu kombinieren oder mehr Strukturen verzweigen, wie unten gezeigt:
match comparisonList:
case [first] | [first, "two", "seven"]:
print("this is the first element: {first}")
case [title, "hello"] | ["hello", title]:
print("Welcome esteemed guest {title}")
case [first, *rest]:
print("This is the first: {first}, and this is the rest: {rest}")
case _:
print("Nothing was matched")
Nach dem Login kopieren
Der erste und der zweite Fall bestehen aus mehreren unterschiedlichen Ausdrücken, an die Vergleichsausdrücke angepasst werden können, um den Fallzweig auszuführen. Dies bietet eine gewisse Flexibilität beim Kombinieren von Zweigen.
Wir werden auch die Syntax „match...case“ für Wörterbücher vorstellen. Der Vergleichsoperator prüft, ob der Vergleichsausdruck die Attribute im Fallausdruck enthält. Zum Beispiel:
comparisonDictionary = {
"John": "boy",
"Jack": "boy",
"Jill": "girl",
"Taylor": "girl"
}
match comparisonDictionary:
case {"John": "boy", "Taylor": "boy"}:
print("John and Taylor are both boys")
case {"John": "boy", "Taylor": "girl"}:
print("Taylor is a girl and John is a boy")
case _:
print("Nothing matches")
Nach dem Login kopieren
Ausgabe:
Taylor is a girl and John is a boy
Nach dem Login kopieren
Der Match-Operator prüft, ob das Case-Attribut im Eingabewörterbuch vorhanden ist und prüft dann, ob die Werte übereinstimmen.
Zusammenfassend ist der neue „match...case“-Operator ein leistungsstarkes Tool, das Python-Entwickler beim Erstellen von Verzweigungsfällen nutzen können. Damit können Sie die Struktur jeder eingehenden Variablen zuverlässig überprüfen und sicherstellen, dass Sie nicht versuchen, auf etwas zuzugreifen, das in der Variablen nicht vorhanden ist.
Wichtig Beim Wörterbuchabgleich stimmt die Groß-/Kleinschreibung auch dann überein, wenn das Eingabewörterbuch mehr Attribute aufweist, als die Groß-/Kleinschreibung angibt.
Zusammenfassend ist der neue „match...case“-Operator ein leistungsstarkes Tool, das Python-Entwickler beim Erstellen von Verzweigungsfällen nutzen können. Damit ist es möglich, die Struktur jeder eingehenden Variablen zuverlässig zu überprüfen und sicherzustellen, dass keine Versuche unternommen werden, auf etwas zuzugreifen, das auf der Variablen nicht vorhanden ist.
Das obige ist der detaillierte Inhalt vonVerwendung von „match...case' in Python 3.10. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!