In Python 3.10 wurde der Mechanismus des strukturellen Pattern Matching eingeführt, der match-case Operator. Historisch wurden in Python komplexe Bedingungen durch if/elif/else-Ketten implementiert, was bei der Analyse von geschachtelten Strukturen (z. B. Dictionaries, verschachtelte Tupel) umständlich war.
Problem — komplexe geschachtelte Überprüfungen werden schwer lesbar und schwierig zu warten. Der Ansatz mit match-case ermöglicht es, Prüfungen prägnant zu beschreiben, Variablen zu entpacken und Guard-Bedingungen zu verwenden.
Lösung — Verwenden Sie die Syntax match-case, die es ermöglicht, die Struktur eines Objekts (Dictionaries, Tupel, Listen) mit einem bestimmten Muster abzugleichen und Daten zu extrahieren.
Beispielcode:
point = (1, 2) match point: case (0, 0): print('Ursprung') case (0, y): print(f'Y={y}') case (x, 0): print(f'X={x}') case (x, y): print(f'X={x}, Y={y}')
Schlüsselfeatures:
Kann match-case für gewöhnliche if-elif-else-Bedingungen mit einzelnen Werten verwendet werden?
Ja, jedoch liegt die Stärke von match-case in der Strukturiertheit. Für einfache diskrete Bedingungen ähnelt es switch-case-Anweisungen in Sprachen wie C.
Kann match-case mit unveränderlichen Objekten (z. B. str) verwendet werden?
Ja, match-case funktioniert mit allen Objekten, die mit dem Muster verglichen werden können, einschließlich Strings und Zahlen.
Beispielcode:
color = 'red' match color: case 'red': print('Das ist rot') case 'blue': print('Das ist blau') case _: print('Unbekannte Farbe')
Welcher Fehler kann auftreten, wenn Objekte mit denselben Variablennamen im äußeren Geltungsbereich abgeglichen werden?
Das Muster-Matching weist Variablen lokal innerhalb des case zu, unabhängig vom äußeren Kontext. Dies kann zu Verwirrung führen, wenn der Variablenname bereits außerhalb verwendet wird.
Verwendung von match-case für eine große if-elif-else-Anweisung mit einfachen Konstanten.
Vorteile:
Nachteile:
Bearbeitung eines Streams von geschachtelten JSON-Strukturen aus einer API, bei denen unterschiedliche Fälle eine unterschiedliche Datenextraktion aus verschiedenen Ebenen der Struktur erfordern.
Vorteile:
Nachteile: