Bedingungen in Python: if‑elif‑else, Dicts & match‑case

1. Einführung

Python wird wegen seiner Einfachheit und intuitiven Syntax von vielen Programmierern geschätzt, aber manche sind überrascht, dass es keine „switch-case“-Syntax wie in anderen Sprachen gibt. Deshalb muss man in Python „if-elif-else“ oder das „Dictionary“-Objekt verwenden, um ähnliche Abläufe zu realisieren. In diesem Artikel werden die traditionellen Bedingungszweige in Python, die Alternative mit Dictionaries und die neue „match-case“-Anweisung, die mit Python 3.10 eingeführt wurde, Schritt für Schritt erklärt. Dadurch können Sie effiziente Methoden der Bedingungslogik in Python meistern und sie in der Praxis beim Programmieren einsetzen.

2. Warum Python keine Switch-Anweisung hat

Der Grund, warum Python keine Switch‑Case‑Anweisung verwendet, liegt in seiner Einfachheit und Lesbarkeit. Die Designer von Python streben danach, die Sprache so knapp wie möglich zu halten und Wiederholungen sowie redundante Syntax zu vermeiden. Obwohl Switch‑Anweisungen in anderen Sprachen nützlich sind, kann man in Python dieselbe Funktionalität mit „if‑elif‑else“-Anweisungen oder Dictionaries erreichen, sodass das Hinzufügen einer Switch‑Anweisung nicht nötig ist. Tatsächlich wird in der offiziellen Python‑Dokumentation angegeben, dass man die Funktionalität einer Switch‑Anweisung mit if‑elif‑else‑Anweisungen abdecken kann. Der folgende Code ist ein Beispiel für eine Switch‑Anweisung in C und ähnlichen Sprachen.
switch (value) {
  case 1:
    printf("Value is 1");
    break;
  case 2:
    printf("Value is 2");
    break;
  default:
    printf("Other value");
}
In Python kann man das wie folgt umschreiben.
value = 1
if value == 1:
    print("Value is 1")
elif value == 2:
    print("Value is 2")
else:
    print("Other value")
Auf diese Weise kann Python Bedingungszweige auch ohne Switch‑Anweisung einfach umsetzen.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Beispiel für die Verwendung von if-elif-else

Die grundlegendste Methode, um in Python Verzweigungen zu implementieren, ist die „if-elif-else“-Anweisung. Sie ist sehr effektiv, wenn unterschiedliche Aktionen basierend auf mehreren Bedingungen ausgeführt werden sollen. Im Folgenden ein typisches Anwendungsbeispiel.
value = 100
if value < 50:
    print("Kleiner Wert")
elif value < 100:
    print("Mittlerer Wert")
else:
    print("Großer Wert")
In diesem Code wird je nach Wert der Variablen value eine unterschiedliche Meldung ausgegeben. Die if-elif-else-Anweisung ermöglicht eine einfache und intuitive Verzweigung.

Probleme bei zunehmender Anzahl von Bedingungen

Allerdings kann der Code unübersichtlich werden, wenn die Verschachtelung von if-elif-else-Anweisungen zu tief wird. Besonders bei komplexen Bedingungen ist die im Folgenden vorgestellte Methode mit einem „Dictionary“-Ansatz nützlich.

4. Bedingte Verzweigungen mit dem Dictionary‑Typ

Durch die Verwendung des Dictionary‑Typs in Python können Sie eine bedingte Verzweigung implementieren, die einer switch‑case‑Anweisung ähnelt. Der Dictionary‑Typ ist eine Datenstruktur, die Schlüssel‑Wert‑Paare speichert und mehrere Bedingungen kompakt darstellen kann. Im folgenden Beispiel wird das Ergebnis entsprechend der vom Benutzer eingegebenen Zahl angezeigt.
numbers = {1: "eins", 2: "zwei", 3: "drei"}
value = int(input("Bitte geben Sie eine Zahl von 1 bis 3 ein: "))

if value in numbers:
    print(f"Ausgewählte Zahl: {numbers[value]}")
else:
    print("Bitte geben Sie eine Zahl von 1 bis 3 ein")
Auf diese Weise können Sie mit dem Dictionary‑Typ den Code kurz und lesbar halten, selbst wenn viele Bedingungen vorhanden sind.

Vorteile des Dictionary‑Typs

Bedingte Verzweigungen mit dem Dictionary‑Typ behalten auch bei zunehmender Anzahl von Bedingungen eine hohe Lesbarkeit des Codes und erleichtern die Wartung – das ist ein großer Vorteil. Besonders wenn mehrere Operationen für einen Wert erforderlich sind, ist es effizienter als if‑elif‑else‑Anweisungen.
侍エンジニア塾

5. Neue Funktionen in Python 3.10: Einführung der match-case-Anweisung

Die seit Python 3.10 eingeführte „match-case“-Anweisung hat eine Syntax, die der switch-case-Anweisung sehr ähnlich ist und ermöglicht es, mehrere Bedingungen kompakt zu schreiben. Diese neue Funktion ist besonders stark im Pattern Matching und verbessert die Lesbarkeit und Wartbarkeit des Codes im Vergleich zu herkömmlichen if‑elif‑else‑Anweisungen oder Methoden mit Dictionaries erheblich.

Grundsyntax von match-case

Im Folgenden ein grundlegendes Anwendungsbeispiel für die match-case-Anweisung.
def check_value(value):
    match value:
        case 1:
            print("Eins wurde ausgewählt")
        case 2:
            print("Zwei wurde ausgewählt")
        case _:
            print("Ein Wert außer 1 oder 2 wurde ausgewählt")
In diesem Code wird je nach Wert der Variablen value eine unterschiedliche Verarbeitung ausgeführt. case _ dient als Standardverarbeitung und wird ausgeführt, wenn keiner der Bedingungen entspricht.

6. Anwendungsbeispiele für match-case

Die match-case-Anweisung eignet sich auch für komplexere Verzweigungen und Musterabgleiche. Zum Beispiel ist es möglich, Verarbeitungen basierend auf der Anzahl der Listenelemente oder dem Datentyp durchzuführen.

match-case-Anweisung für mehrere Bedingungen

def process_data(data):
    match data:
        case [x, y]:
            print(f"Die Liste enthält 2 Elemente: {x}, {y}")
        case [x, y, z]:
            print(f"Die Liste enthält 3 Elemente: {x}, {y}, {z}")
        case _:
            print("Die Anzahl der Listenelemente ist unterschiedlich")
In diesem Beispiel wird je nach Anzahl der Listenelemente eine unterschiedliche Verarbeitung durchgeführt. Die match-case-Anweisung zeichnet sich dadurch aus, dass sie mehrere Bedingungen und Muster einfach beschreiben kann.

7. Vergleich von if-elif-else, Dictionary‑Typ und match-case

Jede Verzweigungsmethode hat ihre eigenen Vor‑ und Nachteile. Im Folgenden ist die Vergleichstabelle dargestellt.
MethodeVorteileNachteile
if-elif-elseEinfach und intuitivBei vielen Bedingungen wird der Code komplex
Dictionary‑Typ (dictionary)Hohe Lesbarkeit, besonders bei vielen Bedingungen nützlichNicht alle Bedingungen lassen sich in ein Dictionary fassen
match-caseFür mehrere Verzweigungen und Pattern Matching geeignetNur ab Python 3.10 verfügbar
Durch diese Vergleichstabelle wird es einfacher, die optimale Verzweigungsmethode auszuwählen. Besonders die match-case‑Anweisung ist sehr gut für komplexes Pattern Matching geeignet und vermeidet die Redundanz von if-elif-else‑Anweisungen.

8. Zusammenfassung

Obwohl Python keine switch‑case‑Anweisung hat, können Sie mit if‑elif‑else‑Anweisungen, Dictionaries und der match‑case‑Anweisung von Python 3.10 effektiv Bedingungen verzweigen. Besonders die match‑case‑Anweisung ist stark im Pattern Matching und ermöglicht es, komplexe Bedingungszweige einfach zu schreiben, sodass sie in zukünftigen Entwicklungen sehr nützlich sein wird. Durch die Auswahl der geeigneten Methode je nach Bedingung können Sie effizienten und gut lesbaren Code erstellen. Auf diese Weise, indem Sie das Verständnis jeder Methode vertiefen, können Sie die optimale Herangehensweise für das jeweilige Projekt auswählen.