Direkt zum Inhalt

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Aktualisierte 15. Jan. 2025  · 7 Min. Lesezeit

Entdecke die match-case Anweisung, die in Python 3.10 eingeführt wurde, und lerne, wie strukturelles Pattern-Matching die Python-Programmierung auf eine neue Ebene der Eleganz und Leistungsfähigkeit bringt. Wir werden uns mit der Syntax, den Anwendungen in den Bereichen Data Science und maschinelles Lernen und sogar mit dem Vergleich zu traditionellen switch-case-Anweisungen in anderen Sprachen befassen. Wenn du neu in Python bist, solltest du dir unseren Python-Spickzettel für Einsteiger ansehen. 

Die traditionellen Switch Case-Anweisungen verstehen

Vor Python 3.10 mussten Python-Entwickler mehrere if-elif-else-Anweisungen oder Wörterbücher verwenden, um die Switch-Case-Funktion zu simulieren. Hier ist ein einfaches Beispiel mit if-elif-else:

day = input("Enter the day of the week: ").capitalize()

if day == "Saturday" or day == "Sunday":
    print(f"{day} is a weekend.")
elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]:
    print(f"{day} is a weekday.")
else:
    print("That's not a valid day of the week.")
Saturday is a weekend.

Einführung von Match und Case in Python 3.10

Mit der Einführung von match-case bietet Python jetzt eine Funktion, die auf strukturellem Mustervergleich basiert und es dir ermöglicht, sauberere und leistungsfähigere bedingte Logik zu schreiben.

Was ist Structural Pattern Matching?

Der strukturelle Musterabgleich, der in PEP 634 eingeführt wurde, ist eine Möglichkeit, Datenstrukturen anhand ihrer Form und ihres Inhalts abzugleichen und zu destrukturieren. Sie ist flexibler als herkömmliche Werteabgleiche und ermöglicht es Entwicklern, mit Sequenzen, Mappings und sogar benutzerdefinierten Klasseninstanzen zu arbeiten.

Die grundlegende Syntax von Match-Case

Hier ist ein einfaches Beispiel für match-case in Aktion. Lass uns die Wochentage in Wochenenden und Wochentage einteilen:

# Take user input for the day of the week
day = input("Enter the day of the week: ").capitalize()

# Match the day to predefined patterns
match day:
    case "Saturday" | "Sunday":
        print(f"{day} is a weekend.")  # Match weekends
    case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday":
        print(f"{day} is a weekday.")  # Match weekdays
    case _:
        print("That's not a valid day of the week.")  # Default case
Monday is a weekday.

Die wichtigsten Begriffe in diesem Beispiel:

  1. capitalize() Methode: Stellt sicher, dass die Benutzereingabe dem erwarteten Format entspricht (z. B. "Montag" statt "monday").
  2. Mustervergleiche mit case:
    • case "Saturday" | "Sunday": Entspricht einem der aufgeführten Muster. Das Symbol | funktioniert wie ein ODER-Operator.
    • case _: Ein Auffangfall (Standard), um ungültige Eingaben zu behandeln.
  3. No break Needed: Anders als beim traditionellen switch-case verlässt Python den match Block nach der ersten erfolgreichen Übereinstimmung.

Vergleich von match-case und if-elif-else

In der folgenden Tabelle kannst du sehen, wie die beiden Techniken im Vergleich aussehen: 

Feature if-elif-else match-case
Eingeführt in Verfügbar seit frühen Python-Versionen Eingeführt in Python 3.10
Syntax Verwendet die Schlüsselwörter if, elif und else Verwendet Schlüsselwörter mit Übereinstimmung und Groß-/Kleinschreibung
Lesbarkeit Kann bei vielen Bedingungen sehr ausführlich werden Prägnanter und lesbarer bei komplexen Mustern
Standardfall Verwendet sonst für ein Standardszenario Verwendet _ als Platzhalter für den Standardfall
Musterabgleich Begrenzt auf einfache Zustandskontrollen Unterstützt komplexen Mustervergleich (z. B. Sequenzen)
Leistung Generell effizient für einfache Bedingungen Potenziell leistungsfähiger bei komplexen Mustern
Umfang Jeder Block erfordert einen expliziten Geltungsbereich mit Einrückung Geltungsbereiche werden natürlich unter Fallblöcken definiert
Anwendungsfälle Geeignet für einfache Entscheidungsaufgaben Ideal für die Dekonstruktion komplexer Datenstrukturen
Flexibilität Begrenzt auf skalare Vergleiche Kann komplexe Datentypen und Strukturen abgleichen
Automatische Pause Erfordert in einigen Sprachen eine explizite Unterbrechung Beendet sich automatisch, nachdem ein Fall gefunden wurde

Erweiterte Anwendungsfälle von Match und Case in Python

Datenwissenschaftliche Anwendungen

Die match-case-Anweisung von Python kann bei der Datenvorverarbeitung in der Datenwissenschaft sehr nützlich sein. Bei der Vorverarbeitung werden die Daten oft anhand bestimmter Kriterien in verschiedene Gruppen eingeteilt.

Wenn du zum Beispiel einen Datensatz mit Tieren hast, möchtest du sie vielleicht nach ihrer Klasse wie Säugetiere, Vögel, Reptilien usw. kategorisieren. Hier ist ein vereinfachtes Beispiel:

animal = "Eagle"
match animal:
    case "Eagle" | "Parrot":
        print("Bird")
    case "Lion" | "Tiger":
        print("Mammal")
    case "Python" | "Crocodile":
        print("Reptile")
    case _:
        print("Unknown Class")
Bird

Dieser Ansatz vereinfacht die komplexe if-else-Logik und macht den Code besser lesbar und wartbar, vor allem bei großen Datensätzen mit mehreren Kategorien.

Web-Entwicklung

In Web-Frameworks wie Django oder Flask kannst du match-case verwenden, um HTTP-Anfragen weiterzuleiten oder bestimmte Fehlercodes zu behandeln. Lerne mehr über Python für Entwickler mit unserem Online-Kurs. 

Beispiel: Routing von HTTP-Methoden

# Example: Handling HTTP methods in a Flask-like application
method = "POST"

match method:
    case "GET":
        print("Fetching resource...")
    case "POST":
        print("Creating resource...")
    case "PUT":
        print("Updating resource...")
    case "DELETE":
        print("Deleting resource...")
    case _:
        print("Unsupported HTTP method.")

Erläuterung:

  • Die Variable method steht für den Typ der HTTP-Anfrage.
  • Jedes case entspricht einer möglichen HTTP-Methode und vereinfacht damit das, was sonst aus mehreren if-elif Anweisungen bestehen würde.

API-Behandlung

Bei der Verarbeitung von API-Antworten kann match-case verwendet werden, um verschiedene Statuscodes zu behandeln oder JSON-Antworten zu kategorisieren.

Beispiel: Umgang mit Statuscodes

# Example: API response status code handling
status_code = 200

match status_code:
    case 200:
        print("Request succeeded.")
    case 404:
        print("Resource not found.")
    case 500:
        print("Server error. Please try again later.")
    case _:
        print("Unknown status code.")

Dieser Ansatz macht es einfacher, die API-Ergebnisse zu interpretieren und darauf zu reagieren.

Einfacher vs. komplexer Mustervergleich

Pythons match-case ist nicht auf die Suche nach konstanten Werten beschränkt, sondern kann auch kompliziertere Muster verarbeiten. Hier gibt es einen Unterschied:

Einfacher Konstantenabgleich

Einfache Übereinstimmungen wie Strings oder Ganzzahlen eignen sich hervorragend für eine saubere, lesbare Logik, wie in den Beispielen oben gezeigt.

Komplexer Mustervergleich

Bei der Arbeit mit strukturierten Daten (z. B. Wörterbüchern, Sequenzen) kann match-case Daten effizient extrahieren und manipulieren.

Beispiel: Passende Datenstrukturen

# Example: Categorizing configurations
config = {"type": "database", "name": "PostgreSQL", "version": 13}

match config:
    case {"type": "database", "name": name, "version": version}:
        print(f"Database: {name} (Version {version})")
    case {"type": "cache", "name": name}:
        print(f"Cache system: {name}")
    case _:
        print("Unknown configuration.")

Erläuterung:

  • Die erste case extrahiert name und version aus dem Wörterbuch und erleichtert so die Arbeit mit strukturierten Daten.
  • Hier zeigt sich die wahre Stärke von Pythons strukturellem Mustervergleich, der weit über das hinausgeht, was herkömmliche Switch-Case-Implementierungen erreichen können.

Python Switch Case Häufige Fallstricke und Best Practices

Tipps zur Fehlersuche

Ein häufiger Fehler bei der Verwendung von match-case in Python ist es, den Unterstrich (_) für den Standardfall zu vergessen, ähnlich wie das "else" in traditionellen if-else-Anweisungen. Das kann zu unerwartetem Verhalten führen, wenn keiner der spezifischen Fälle zutrifft. Füge immer einen Standardfall ein, um unerwartete oder verschiedene Werte zu behandeln.

Überlegungen zur Leistung

Die match-case-Anweisung ist zwar ein mächtiges Werkzeug, aber ihre Auswirkungen auf die Leistung von Python-Code, insbesondere bei umfangreichen Anwendungen, sollten bedacht werden. In Szenarien mit einer großen Anzahl von Fällen oder komplexem Musterabgleich kann die Leistung möglicherweise beeinträchtigt werden. Das Profiling und Testen deines Codes auf Leistung in realen Szenarien ist entscheidend, um potenzielle Leistungsprobleme zu verstehen und zu entschärfen.

Python Match-Case versus traditionelles Switch-Case

Vergleichende Analyse

Pythons match-case unterscheidet sich deutlich von den traditionellen switch-case-Anweisungen in Sprachen wie Java oder C++. In Java ist die switch-Anweisung zum Beispiel darauf beschränkt, nur skalare Werte (wie Ganzzahlen und Aufzählungstypen) abzugleichen, während Pythons match-case eine viel flexiblere Musterabgleichsfunktion bietet, die den Abgleich komplexer Datentypen wie Sequenzen und Klasseninstanzen ermöglicht. Das macht die Python-Implementierung leistungsfähiger, erfordert aber auch ein tieferes Verständnis der Konzepte des Mustervergleichs.

Leitfaden für den Übergang

Für Programmierer, die mit traditionellen switch-case-Anweisungen in Sprachen wie C++ oder Java vertraut sind, erfordert der Übergang zu Pythons match-case ein Umdenken vom einfachen Wertevergleich zum Mustervergleich.

Es ist wichtig zu verstehen, dass Pythons match-case mehr ist als nur ein switch-case; es ist ein vielseitiges Werkzeug, um Datentypen zu dekonstruieren und Informationen aus komplexen Strukturen zu extrahieren. Das Üben mit verschiedenen Datentypen und -mustern ist der Schlüssel zur Beherrschung der Anwendung.

Fazit

Mit der Einführung der match- und case-Anweisungen in Version 3.10 bietet Python eine lang erwartete Funktion für Entwickler, die mit switch case-Anweisungen in anderen Sprachen vertraut sind. Sie bietet eine saubere und übersichtliche Möglichkeit, mehrere Bedingungen zu behandeln, was die Lesbarkeit und Wartbarkeit des Codes verbessert.

Mehr über Python-Funktionen erfährst du in unserem vollständigen Tutorial, und dieses und andere Konzepte kannst du in unserem Python-Kurs für Fortgeschrittene erkunden.


Matt Crabtree's photo
Author
Matt Crabtree
LinkedIn

Autorin und Redakteurin im Bereich der Bildungstechnologie. Engagiert bei der Erforschung von Datentrends und begeistert davon, Data Science zu lernen.

Python Switch Case FAQs

Was passiert, wenn zwei Fälle in einer match-case-Anweisung auf dieselbe Eingabe passen?

Python wertet die Fälle in der Reihenfolge aus, in der sie erscheinen. Der erste übereinstimmende Fall wird ausgeführt, und der Match-Block wird sofort beendet.

Kann match-case auch mit benutzerdefinierten Klassen oder Objekten verwendet werden?

Ja, match-case kann mit benutzerdefinierten Klassen arbeiten. Du kannst Muster definieren, um Attribute abzugleichen, oder sogar Guards verwenden, um zusätzliche Logik anzuwenden.

Ist match-case schneller als if-elif-else?

Der Leistungsunterschied hängt von der Komplexität der Bedingungen ab. Bei einfachen Wertprüfungen funktionieren beide ähnlich. Für komplexe Mustervergleiche kann match-case jedoch effizienter und lesbarer sein.

Was ist eine Guard in einer Match-Case-Anweisung?

Ein Guard ist eine Bedingung, die nach case angegeben wird und die die Übereinstimmung mit einem Fall weiter einschränkt. Zum Beispiel:

match value:
    case x if x > 10:
        print("Value is greater than 10.")

Kannst du match-case auch mit Python-Versionen vor 3.10 verwenden?

Nein, match-case ist nur in Python 3.10 und höher verfügbar. Für frühere Versionen kannst du if-elif-else oder die Wörterbuchzuordnung verwenden, um eine ähnliche Funktion zu erreichen.

Themen

Lerne Python heute

Zertifizierung verfügbar

Kurs

Intermediate Python

4 hr
1.2M
Verbessere deine Data Science-Fähigkeiten, indem du mit Matplotlib Visualisierungen erstellst und DataFrames mit Pandas manipulierst.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Mehr anzeigenMehr anzeigen