Erklärung zur Lektion
Nach dieser Lektion kannst du:
case-Muster verarbeiten._ einen abschließenden Auffangfall ergänzen.| kombinieren.Die match-Anweisung von Python ist nützlich, wenn ein Wert mehrere bekannte Formen oder Befehle annehmen kann. Sie ähnelt switch in anderen Sprachen, wird in Python aber als strukturelles Pattern Matching (Musterabgleich) bezeichnet.
match command:
case "start":
print("Starting")
case "stop":
print("Stopping")
case _:
print("Unknown command")Python prüft die Fälle von oben nach unten und führt den ersten passenden aus. Es gibt kein Durchfallen (Fall-through), du musst also nach jedem Zweig kein break ergänzen.
Verwende |, wenn mehrere literale Werte dasselbe Ergebnis haben sollen. Ein Guard fügt nach einem Muster eine if-Bedingung hinzu, wenn der Abgleich des Werts allein nicht ausreicht.
Für einfache Schwellenwerte wie score >= 90 bleibt ein normales if / elif / else übersichtlicher. Diese Lektion konzentriert sich auf literale Verzweigung, Alternativen, Auffangfälle und einen Fall mit Guard – nicht auf fortgeschrittene Sequenz- oder Objektmuster.
Jeder literale Fall behandelt einen bekannten Befehl.
command = "pause"
match command:
case "start":
print("Worker: starting")
case "pause":
print("Worker: paused")
case _:
print("Worker: unsupported")Ausgabe:
Worker: pausedEs wird nur der erste passende Fall ausgeführt.
Der Platzhalter _ behandelt Werte, die nicht ausdrücklich aufgelistet wurden.
export_format = "xml"
match export_format:
case "csv":
print("Exporter: CSV")
case "json":
print("Exporter: JSON")
case _:
print("Exporter: unavailable")Ausgabe:
Exporter: unavailableDer Platzhalter sollte nach den spezifischen Fällen stehen.
Verwende |, wenn mehrere Muster zum selben Zweig führen.
method = "HEAD"
match method:
case "GET" | "HEAD":
print("Request: read")
case "POST" | "PUT":
print("Request: write")
case _:
print("Request: unsupported")Ausgabe:
Request: readDer Zweig wird ausgeführt, wenn eines der beiden Literale passt.
Ein Guard verfeinert einen passenden Fall durch eine zusätzliche Bedingung.
event_type = "payment"
amount = 1250
match event_type:
case "payment" if amount >= 1000:
print("Payment: manual review")
case "payment":
print("Payment: automatic")
case _:
print("Event: ignored")Ausgabe:
Payment: manual reviewDer Payment-Fall mit Guard muss vor dem allgemeineren Payment-Fall stehen.
| Ziel | Muster |
|---|---|
| Ein Literal abgleichen | case "start": |
| Eines von zwei Literalen abgleichen | `case "GET" |
| Eine weitere Bedingung hinzufügen | case "payment" if amount > 0: |
| Alles andere behandeln | case _: |
break; Python fällt nicht in den nächsten Fall durch.case _ nicht vor den spezifischen Fällen.match nicht für gewöhnliche numerische Schwellenwerte, die mit if / elif übersichtlicher sind.