Gibt es ein Python-Äquivalent für die switch
Aussage?
Was ist das Python-Äquivalent für eine case/switch-Anweisung? [duplicate]
John Allee
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 switch
ich 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 verwendenlambda
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
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
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
match
–case
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