„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Strukturmustervergleich in Python

Strukturmustervergleich in Python

Veröffentlicht am 09.11.2024
Durchsuche:502

Structural pattern matching in Python

Strukturmustervergleich ist eine leistungsstarke Funktion in Python, die es Ihnen ermöglicht, Entscheidungen auf der Grundlage der Struktur komplexer Daten zu treffen und daraus gewünschte Werte zu extrahieren. Es bietet eine prägnante und deklarative Möglichkeit, bedingte Logik auszudrücken und kann die Lesbarkeit und Wartbarkeit des Codes erheblich verbessern. In diesem Artikel werden wir einige reale Fallstudienbeispiele zur Verwendung des strukturellen Mustervergleichs in Python untersuchen.

1. API-Antworten analysieren
Ein häufiger Anwendungsfall für den Strukturmusterabgleich ist das Parsen von API-Antworten. Stellen Sie sich vor, Sie arbeiten mit einer Wetter-API, die Daten im folgenden Format zurückgibt:

{
  "current_weather": {
    "location": "New York",
    "temperature": 25,
    "conditions": "Sunny"
  }
}

Um die Temperatur aus dieser Antwort zu extrahieren, können Sie den strukturellen Mustervergleich wie folgt verwenden:

response = {
  "current_weather": {
    "location": "New York",
    "temperature": 25,
    "conditions": "Sunny"
  }
}

match response:
    case {"current_weather": {"temperature": temp}}:
        print(f"The current temperature in {response['current_weather']['location']} is {temp} degrees Celsius.")
    case _:
        print("Invalid response.")

Dieses Muster gleicht jedes Wörterbuch mit einem „current_weather“-Schlüssel ab, und innerhalb dieses Schlüssels gleicht es den „temperatur“-Wert ab und extrahiert ihn als Variable temp. Dies ermöglicht Ihnen den einfachen Zugriff auf die gewünschten Daten, ohne mehrere if-Anweisungen schreiben zu müssen, um das Vorhandensein von Schlüsseln zu überprüfen.

2. Datenverarbeitung
Der Strukturmustervergleich kann auch bei der Arbeit mit großen Datensätzen nützlich sein. Stellen Sie sich vor, Sie verfügen über einen Datensatz mit Informationen zu verschiedenen Produkten, einschließlich Name, Kategorie und Preis. Sie möchten den Datensatz so filtern, dass er nur Produkte enthält, die unter einem bestimmten Preisschwellenwert liegen. Mithilfe des Mustervergleichs können Sie die gewünschten Daten extrahieren und wie folgt filtern:

products = [
  {"name": "Smartphone", "category": "Electronics", "price": 500},
  {"name": "T-shirt", "category": "Clothing", "price": 20},
  {"name": "Headphones", "category": "Electronics", "price": 100},
  {"name": "Jeans", "category": "Clothing", "price": 50},
]

match products:
    case [{"category": "Electronics", "price": price} for price in range(200)] as electronics:
        print([product["name"] for product in electronics])
    case [{"category": "Clothing", "price": price} for price in range(40)] as clothing:
        print([product["name"] for product in clothing])
    case _:
        print("No products found.")

In diesem Beispiel stimmen die Muster überein und extrahieren die Werte basierend auf den Kategorie- und Preisbeschränkungen. Dies ermöglicht einen prägnanteren und lesbareren Ansatz zum Filtern des Datensatzes.

3. Validierung der Benutzereingabe
Der Strukturmustervergleich kann auch zur Validierung von Benutzereingaben nützlich sein. Stellen Sie sich vor, Sie erstellen ein Anmeldeformular für eine Website und möchten sicherstellen, dass die E-Mail-Adresse des Benutzers das richtige Format hat und dass sein Passwort bestimmte Anforderungen erfüllt. Sie können den Mustervergleich verwenden, um diese Validierungen wie folgt durchzuführen:

import re

email = "[email protected]"
password = "12345"

match email:
    case _ if not re.match(r"^\w @[a-zA-Z_] ?\.[a-zA-Z]{2,3}$", email):
        print("Invalid email format.")
    case _ if len(password) 



Dieses Muster gleicht und validiert das E-Mail-Format mithilfe eines regulären Ausdrucks und die Passwortlänge mithilfe einer Längenprüfung. Dieser Ansatz kann bei Bedarf problemlos um zusätzliche Validierungen erweitert werden.

4. Dynamisches Versenden von Funktionen
Ein weiterer interessanter Anwendungsfall für den Strukturmustervergleich ist das dynamische Versenden von Funktionen basierend auf Eingabeparametern. Stellen Sie sich vor, Sie arbeiten mit einem Taschenrechnerprogramm, bei dem der Benutzer eine Operation und zwei Zahlen eingeben kann und das Programm die Berechnung dafür durchführt. Sie können den Mustervergleich verwenden, um die richtige Funktion basierend auf der angegebenen Operation wie folgt auszuführen:

from operator import add, sub, mul, truediv as div

def calculate(operator, num1, num2):
    match operator:
        case " ":
            return add(num1, num2)
        case "-":
            return sub(num1, num2)
        case "*":
            return mul(num1, num2)
        case "/":
            return div(num1, num2)
        case _:
            print("Invalid operation.")

result = calculate("*", 5, 3)
print(f"The result is: {result}")
# Output: The result is: 15

Dieses Muster entspricht dem angegebenen Operator und führt die entsprechende Funktion vom Operatormodul aus. Dies bietet einen kompakten und erweiterbaren Ansatz für die Handhabung verschiedener Operationen, ohne dass mehrere if-Anweisungen geschrieben werden müssen.

Abschluss
Der Strukturmustervergleich ist eine leistungsstarke Funktion in Python, die prägnanten, deklarativen und selektiven Code ermöglicht. Es kann in einer Vielzahl von Szenarien eingesetzt werden, vom Parsen von API-Antworten über die Validierung von Benutzereingaben bis hin zum dynamischen Versenden von Funktionen. Durch die Nutzung struktureller Muster können Sie die Lesbarkeit und Wartbarkeit Ihres Codes verbessern und komplexe Logik leichter verwaltbar machen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/myexamcloud/structural-pattern-matching-in-python-3em1?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3