Die Python-Switch-Anweisung

Einleitung

Die switch-Anweisung ist ein leistungsstarkes und praktisches Werkzeug zur Steuerung des Programmflusses. Es ermöglicht Ihnen, schnell und einfach mehrere Codezweige zu erstellen, abhängig vom Wert einer bestimmten Variablen oder eines bestimmten Ausdrucks. Es wird häufig verwendet, wenn Sie abhängig vom Wert einer bestimmten Variablen, die mehr als zwei (jedoch eine endliche Anzahl) Werte haben kann, unterschiedliche Logik ausführen müssen.

In diesem Artikel untersuchen wir die Verwendung der Switch-Anweisung in Python und diskutieren ihre Vorteile gegenüber anderen Kontrollstrukturen. Unabhängig davon, ob Sie Python-Neuling oder ein erfahrener Entwickler sind, kann Ihnen die switch-Anweisung dabei helfen, saubereren und effizienteren Code zu schreiben.

Vor v3.10

Bevor die Python-Switch-Anweisung nativ in der Sprache verfügbar war, mussten Programmierer andere Kontrollstrukturen verwenden, um die gleiche Funktionalität zu erreichen. Ein gängiger Ansatz bestand darin, eine Reihe von if-else-Anweisungen zu verwenden, wobei jeder Codezweig einem anderen Wert der zu testenden Variablen zugeordnet wurde.

Betrachten Sie beispielsweise den folgenden Code:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

In diesem Code verwenden wir eine if-else-Anweisung, um basierend auf dem Wert der Variablen zu bestimmen, welcher Codezweig ausgeführt werden soll value. Wenn value gleich „foo“ ist, wird der erste Codezweig ausgeführt. Wenn value gleich „bar“ ist, wird der zweite Codezweig ausgeführt. Ansonsten ist der Code in der else Block wird ausgeführt.

Obwohl dieser Ansatz funktioniert, kann er mit zunehmender Anzahl möglicher Werte für die Variable schnell unhandlich werden. Darüber hinaus kann es dazu führen, dass der Code schwer lesbar und verständlich ist.

Ein weiterer Ansatz zum Erstellen einer switch-ähnlichen Anweisung in Python ist die Verwendung eines Wörterbuchs. Bei diesem Ansatz sind die Schlüssel des Wörterbuchs die möglichen Werte der getesteten Variablen und die Werte sind die entsprechenden Codezweige.

Betrachten Sie beispielsweise den folgenden Code:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

In diesem Code haben wir ein Wörterbuch namens definiert switch, wobei Schlüssel die möglichen Werte der Variablen darstellen value. Für jeden Schlüssel haben wir eine Lambda-Funktion als Wert zugewiesen, die den entsprechenden Codezweig enthält. Um den entsprechenden Codezweig auszuführen, verwenden wir die get() Methode des Wörterbuchs, die es uns ermöglicht, einen Standardwert anzugeben, der verwendet werden soll, wenn der angegebene Schlüssel nicht im Wörterbuch vorhanden ist.

Obwohl dieser Ansatz flexibler und kompakter ist als die Verwendung von if-else-Anweisungen, kann es dennoch schwierig sein, ihn zu lesen und zu verstehen, insbesondere wenn der Code in jedem Zweig komplex ist. Darüber hinaus ist die Verwendung von Lambda-Funktionen erforderlich, was für einige Programmierer verwirrend sein kann. Wir raten von der Verwendung dieser Methode ab, es sei denn, Sie können die anderen Methoden in diesem Artikel aus irgendeinem Grund nicht verwenden.

Mit der Einführung der Python-Switch-Anweisung in Python v3.10 haben Programmierer nun eine bequemere und intuitivere Möglichkeit, den Ablauf ihrer Programme basierend auf dem Wert einer bestimmten Variablen oder eines bestimmten Ausdrucks zu steuern. Im nächsten Abschnitt werden wir untersuchen, wie man eine tatsächliche switch-Anweisung in Python verwendet.

Das match/case Erklärung (nach v3.10)

Nach Python v3.10 wird die switch-Anweisung mithilfe von verarbeitet match Stichwort. Mit diesem Schlüsselwort wird ein Mustervergleichsausdruck erstellt, mit dem Sie den Wert einer bestimmten Variablen oder eines bestimmten Ausdrucks anhand einer Reihe von Mustern testen können. Wenn eine Übereinstimmung gefunden wird, wird der entsprechende Codezweig ausgeführt.

Betrachten Sie beispielsweise den folgenden Code:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

In diesem Code verwenden wir die match Schlüsselwort, um einen Mustervergleichsausdruck zu erstellen, der den Wert der Variablen testet value gegen eine Reihe von Mustern. Wenn value gleich „foo“ ist, wird der erste Codezweig ausgeführt. Wenn value gleich „bar“ ist, wird der zweite Codezweig ausgeführt. Andernfalls wird der Code im else-Block ausgeführt.

Durchfallen

Einer der Hauptunterschiede zwischen Switch-Anweisungen in Python und herkömmlichen Switch-Anweisungen in anderen Sprachen besteht darin, dass Python match Die Anweisung unterstützt kein Fall-Through. Mit anderen Worten: Sobald eine Übereinstimmung gefunden und der entsprechende Codezweig ausgeführt wird, wird der match Ausdruck endet und kein anderer Code in der match Anweisung wird ausgeführt. In anderen Sprachen wird dies normalerweise mit dem erreicht break Schlüsselwort, das hier nicht benötigt oder unterstützt wird.

Wenn Sie dasselbe Verhalten wie bei Fall-Through in einer herkömmlichen Switch-Anweisung erreichen möchten, können Sie die verwenden | Operator, um mehrere Fälle abzugleichen. Mit diesem Operator können Sie mehrere Muster in einem einzigen angeben case, und jedes der Muster kann abgeglichen werden, um die Ausführung dieses Zweigs auszulösen.

Betrachten Sie beispielsweise den folgenden Code:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

Hier, wenn der Wert von value ist gleich „ja“ or „y“, der erste Zweig des Codes wird ausgeführt. Dies entspricht dem Fall-Through-Verhalten in einer herkömmlichen Switch-Anweisung.

Defaults

Wie Sie wahrscheinlich anhand der obigen Beispiele bemerkt haben, wird der Fall „default“ mit einem Unterstrich () behandelt._). Dies gilt als „Platzhalter“ und entspricht allen Werten. Wenn einer der vorherigen Fälle mit dem Wert übereinstimmt, wird der Standardcodezweig übersprungen und nicht ausgeführt.

Zusammenfassung

Wie Sie sehen, bietet die Python-Anweisung match (auch „switch“) eine leistungsstarke und bequeme Möglichkeit, den Ablauf Ihres Programms zu steuern. Unabhängig davon, ob Sie Python-Neuling oder ein erfahrener Entwickler sind, kann Ihnen die switch-Anweisung dabei helfen, saubereren und effizienteren Code zu schreiben.

Zeitstempel:

Mehr von Stapelmissbrauch