Was ist das Python-Äquivalent für eine case/switch-Anweisung? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
John Allee

Gibt es ein Python-Äquivalent für die switch Aussage?

  • Ab Python 3.10 können Sie Pythons verwenden match ... case Syntax: PEP 636.

    – jacob

    27. März 2021 um 9:50 Uhr


  • Python 3.10.0 bietet ein offizielles syntaktisches Äquivalent, wodurch die eingereichten Antworten nicht mehr die optimalen Lösungen sind! In diesem SO-Beitrag versuche ich, alles abzudecken, was Sie über die wissen möchten matchcase konstruieren, inkl häufige Fehler wenn Sie aus anderen Sprachen kommen. Wenn Sie Python 3.10.0 noch nicht verwenden, gelten natürlich die vorhandenen Antworten und sind noch für 2021 gültig.

    – Ruhm

    2. April 2021 um 16:07 Uhr

  • Ich hätte das in eine Antwort auf diesen Beitrag geschrieben, aber leider lässt es keine weiteren Antworten zu. Aber bei mehr als einer Million Views bedarf diese Frage meiner Meinung nach zumindest einer Umleitung auf eine modernere Antwort – vor allem wenn 3.10.0 stabil wird und Python-Anfänger auf diesen Beitrag stoßen.

    – Ruhm

    2. April 2021 um 16:07 Uhr

Benutzer-Avatar
Prashant Kumar

Python 3.10 und höher

In Python 3.10 führten sie die Musterabgleich.

Beispiel aus der Python-Dokumentation:

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"

        # If an exact match is not confirmed, this last case will be used if provided
        case _:
            return "Something's wrong with the internet"

Vor Python 3.10

Während amtliche Dokumentation stellen sie gerne nicht zur Verfügung switchich habe ein gesehen Lösung mit Wörterbüchern.

Zum Beispiel:

# define the function blocks
def zero():
    print "You typed zero.\n"

def sqr():
    print "n is a perfect square\n"

def even():
    print "n is an even number\n"

def prime():
    print "n is a prime number\n"

# map the inputs to the function blocks
options = {0 : zero,
           1 : sqr,
           4 : sqr,
           9 : sqr,
           2 : even,
           3 : prime,
           5 : prime,
           7 : prime,
}

Dann das Äquivalent switch Block wird aufgerufen:

options[num]()

Dies beginnt auseinanderzufallen, wenn Sie stark auf Durchfall angewiesen sind.

  • Das Wörterbuch muss nach den Funktionsdefinitionen kommen

    – flexxxit

    27. Februar 2014 um 12:50 Uhr

  • In Bezug auf Fall-Through, könnten Sie nicht verwenden options.get(num, default)()oder verstehe ich das falsch?

    – Zaz

    24. September 2015 um 0:24 Uhr

  • Ich denke, ich meinte mehr für den Fall, in dem ein Label Code ausführt und dann in einem Block für ein anderes Label fortfährt.

    – Prashant Kumar

    24. September 2015 um 0:32 Uhr


  • @IanMobbs Es ist fast NOCH NIE “richtig”, um Code dann in eine konstante Zeichenfolge in Anführungszeichen zu setzen eval es. 1) Code wird von Ihrem Redakteur nicht auf Gültigkeit geprüft. 2) es wird bei der Kompilierung nicht auf Bytecode optimiert. 3) Sie können keine Syntaxhervorhebung sehen. 4) Fummelig, wenn Sie mehrere Anführungszeichen haben – tatsächlich muss Ihr Kommentar maskiert werden! Wenn Sie Kürze wünschen, können Sie a verwenden lambda stattdessen, obwohl ich denke, dass das als unpythonisch angesehen wird.

    – Sanjay Manohar

    26. Juli 2017 um 14:26 Uhr

  • Nebenbei bemerkt, 2 ist eine Primzahl

    – 333kenshin

    5. September 2017 um 21:16 Uhr

Benutzer-Avatar
Lennart Regebro

Der direkte Ersatz ist if/elif/else.

In vielen Fällen gibt es jedoch bessere Möglichkeiten, dies in Python zu tun. Siehe “Ersetzungen für die switch-Anweisung in Python?”.

  • Damit bin ich letztendlich gefahren. Ich denke, dass der Musterabgleich mit Zeichenfolgen nicht funktioniert.

    – ArduinoBen

    5. April um 11:03 Uhr

1130910cookie-checkWas ist das Python-Äquivalent für eine case/switch-Anweisung? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy