Gibt es ein Label / Goto in Python?
Gibt es eine goto
oder eine gleichwertige in Python in der Lage sein, um springen zu einer bestimmten Codezeile?
InformationsquelleAutor der Frage user46646 | 2009-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Python unterstützt keine labels und goto, wenn es das ist, was Sie suchen. Es ist ein (hoch -) strukturierte Programmiersprache.
InformationsquelleAutor der Antwort unwind
Python bietet Ihnen die Fähigkeit zu tun, einige der Dinge, die Sie tun könnten, mit ein goto mit first-class-Funktionen. Zum Beispiel:
Kann man in python so:
Zugegeben, das ist nicht der beste Weg, um Ersatz für goto. Aber ohne genau zu wissen was Sie zu tun versuchen, mit goto, es ist schwer zu geben, spezifische Beratung.
@ascobol:
Ihre beste Wette ist, um entweder schließen Sie es in eine Funktion, oder verwenden Sie eine Ausnahme. Für die Funktion:
Für die Ausnahme:
Mit Ausnahmen zu tun Sachen wie diese kann sich ein wenig umständlich, wenn Sie kommen aus einer anderen Programmiersprache. Aber ich würde argumentieren, dass, wenn Sie nicht mögen, mit Ausnahmen, die Python ist nicht die Sprache für Sie. 🙂
InformationsquelleAutor der Antwort Jason Baker
Ich vor kurzem schrieb eine Funktion, Dekorateur ermöglicht
goto
in Python, einfach so:Ich bin mir nicht sicher, warum möchte man so etwas tun obwohl. Das heißt, ich bin nicht zu ernst. Aber ich möchte darauf hinweisen, dass diese Art der meta-Programmierung ist tatsächlich möglich, in Python, zumindest in CPython und PyPy, und nicht nur durch Missbrauch der debugger-API, die anderen Kerl haben. Sie haben zu Chaos mit dem bytecode obwohl.
InformationsquelleAutor der Antwort Sebastian Noack
Antwort auf die
@ascobol
's Frage mit@bobince
's Vorschlag aus den Kommentaren:Den Einzug der
else
block korrekt ist. Der code verwendet obskurenelse
nach einer Schleife Python-syntax. Sehen Warum funktioniert die python verwenden 'else' nach for-und while-Schleifen?InformationsquelleAutor der Antwort jfs
Fand ich diese in der offizielle python-Design und Geschichte FAQ.
Es ist sehr schön, dass dies auch in der offiziellen FAQ, und dass eine schöne Lösung Probe gestellt. Ich mag python, weil seine Gemeinschaft ist die Behandlung auch
goto
wie diese 😉InformationsquelleAutor der Antwort klaas
Einer funktionierenden version gemacht wurde: http://entrian.com/goto/.
Hinweis: Es wurde angeboten, als ein April-Scherz. (funktioniert aber)
Unnötig zu sagen. Ja, es ist lustig, aber verwenden Sie es nicht.
InformationsquelleAutor der Antwort harmv
Etiketten für
break
undcontinue
wurden vorgeschlagen, die in PEP 3136 zurück in 2007, aber es wurde abgelehnt. Die Motivation Abschnitt des Vorschlags zeigt mehrere gemeinsame (wenn unelegant) Methoden für die Nachahmung gekennzeichnetbreak
in Python.InformationsquelleAutor der Antwort Bill the Lizard
Ist es technisch möglich, hinzufügen einer 'gehe zu' like-Anweisung verwendet, um python mit etwas Arbeit. Wir verwenden das "dis" und "neue" Module, die beide sehr nützlich für das Scannen und ändern von python byte-code.
Die Haupt-Idee hinter der Umsetzung ist zunächst markieren Sie einen block von code mithilfe von "goto" und "label" - Aussagen. Eine Besondere "@goto" Dekorator wird verwendet für den Zweck der Kennzeichnung "goto" - Funktionen. Danach Scannen wir den code für diese beiden Anweisungen und wenden Sie die erforderlichen änderungen an den zugrunde liegenden byte-code. Dies alles geschieht unter source code compile-Zeit.
Hoffe, das beantwortet die Frage.
InformationsquelleAutor der Antwort Rabih Kodeih
Ich war auf der Suche nach etwas ähnliches Ding
Also mein Ansatz war die Verwendung eines boolean, um zu helfen brechen aus, aus der geschachtelten for-Schleifen:
InformationsquelleAutor der Antwort yaitloutou
können Sie Benutzer-definierte Ausnahmen zu emulieren
goto
Beispiel:
InformationsquelleAutor der Antwort xavierskip
Wollte ich die gleiche Antwort und ich wollte nicht zu verwenden
goto
. So habe ich das folgende Beispiel (aus learnpythonthehardway)InformationsquelleAutor der Antwort san1512
Es jetzt ist. springen
Ich denke, das könnte nützlich sein für das, was Sie suchen.
InformationsquelleAutor der Antwort ancho
Ich habe meine eigene Art zu tun, gotos.
Ich benutze separate python-Skripts.
Wenn ich will-Schleife:
file1.py
file2.py
file3.py
(HINWEIS: Diese Technik funktioniert nur auf Python 2.x-Versionen)
InformationsquelleAutor der Antwort Anonaguy
In Python goto-Anweisung wird unterstützt mit
goto .<label_name>
undlabel .<label_name>
. Für mehr info gehen Sie bitte über diesen link.In der Regel alle über den Planeten, Menschen empfehlen, vermeiden die Verwendung von goto-Anweisung. Aber ein Fehler Behandlung in einer Funktion behandelt werden kann auch mit nur goto-Anweisung. Auch ich dont bevorzugen die Verwendung von goto anderen als Fehler-handler.
InformationsquelleAutor der Antwort rashok
Für eine vorwärts Springen, Sie konnte nur hinzufügen:
Dies hilft nur für einfache Szenarien, obwohl (D. H. verschachteln diese würde erhalten, die Sie in ein Chaos)
InformationsquelleAutor der Antwort JGFMK