Welche Methoden gibt es, um eine if
Klausel vorzeitig zu beenden ?
Es gibt Zeiten, in denen ich Code schreibe und eine break
Anweisung in eine if
Klausel einfügen möchte , nur um mich daran zu erinnern, dass diese nur für Schleifen verwendet werden können.
Nehmen wir als Beispiel den folgenden Code:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
...
if condition_b:
# do something
# and then exit the outer if block
# more code here
Ich kann mir einen Weg vorstellen, dies zu tun: Angenommen, die Exit-Fälle treten in verschachtelten if-Anweisungen auf, verpacken Sie den verbleibenden Code in einen großen else-Block. Beispiel:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
else:
...
if condition_b:
# do something
# and then exit the outer if block
else:
# more code here
Das Problem dabei ist, dass mehr Exit-Positionen mehr Verschachtelung / eingerückten Code bedeuten.
Alternativ könnte ich meinen Code schreiben, damit die if
Klauseln so klein wie möglich sind und keine Exits erforderlich sind.
Kennt jemand einen guten / besseren Weg, um eine if
Klausel zu beenden?
Wenn es andere else-if- und else-Klauseln gibt, würde das Beenden diese überspringen.
quelle
elif
?if a: #stuff; #stuff_inbetween; if b: #stuff;
Der Zwischencode hängt von abnot a
, hängt aber nicht davon abb
.elif
stackoverflow.com/a/2069680/7045119Antworten:
(Diese Methode funktioniert für
if
s, mehrere verschachtelte Schleifen und andere Konstrukte, die Sie nichtbreak
einfach verwenden können.)Wickeln Sie den Code in eine eigene Funktion ein.
break
Verwenden Sie stattdessenreturn
.Beispiel:
quelle
(Verwenden Sie dies bitte nicht wirklich.)
quelle
goto
.quelle
while True:
. Stellen Sie einfach sicher, dass Siebreak
am Ende eine Erklärung abgeben! Für Sprachen mit dem Do-While-Konstrukt ist es idomatischer:do { code that can conditionally break out } while (false);
Sie können die Funktionalität von goto mit Ausnahmen emulieren:
Haftungsausschluss: Ich möchte Sie nur auf die Möglichkeit aufmerksam machen, Dinge auf diese Weise zu tun, während ich dies unter normalen Umständen in keiner Weise als angemessen befürworte. Wie ich in einem Kommentar zu dieser Frage erwähnt habe, ist es bei weitem vorzuziehen, Code so zu strukturieren, dass byzantinische Bedingungen überhaupt vermieden werden. :-)
quelle
vielleicht das?
quelle
elif
als ich das geschrieben habe. Obwohl ich denke, dass dies in einer Situation nicht funktionieren würde, in der Code zwischen den verschachtelten if-Anweisungen ausgeführt werden soll.Für das, was tatsächlich gefragt wurde, besteht mein Ansatz darin, diese
if
s in eine Schleife mit einer Schleife zu setzenProbier es aus:
quelle
for _ in range(1):
anstelle von zu verwendenwhile True:
. (1) Kommunizieren Sie besser Ihre Absicht einer einzelnen Iterationsschleife und (2) keine letzte Unterbrechungsanweisung zum Verlassen der Schleife (möglicherweise später versehentlich entfernt)Im Allgemeinen nicht. Wenn Sie "Wenns" verschachteln und von ihnen abbrechen, machen Sie es falsch.
Wenn Sie jedoch müssen:
Beachten Sie, dass die Funktionen nicht in der if-Anweisung deklariert werden MÜSSEN, sondern im Voraus deklariert werden können;) Dies wäre eine bessere Wahl, da es nicht erforderlich ist, ein hässliches if / dann später umzugestalten.
quelle
if condition_a
und imif condition_b
Innern einer verschachteltif some_condition
. Ich möchte aus dem ausbrechen könnenif some_condition
.Tatsächlich beschreiben Sie goto-Anweisungen, die im Allgemeinen ziemlich stark verschoben werden. Ihr zweites Beispiel ist viel einfacher zu verstehen.
Sauberer wäre jedoch immer noch:
quelle
Es gibt einen anderen Weg, der nicht auf der Definition von Funktionen beruht (da dies manchmal für kleine Codefragmente weniger lesbar ist), keine zusätzliche äußere while-Schleife verwendet (die möglicherweise eine besondere Berücksichtigung in den Kommentaren erfordert, um auf den ersten Blick verständlich zu sein). , verwendet kein goto (...) und vor allem können Sie Ihre Einrückungsstufe für das Äußere beibehalten, wenn Sie nicht mit dem Verschachteln beginnen müssen.
Ja, das erfordert auch einen zweiten Blick auf die Lesbarkeit. Wenn die Codeausschnitte jedoch klein sind, müssen keine while-Schleifen nachverfolgt werden, die sich nie wiederholen. Nachdem Sie verstanden haben, wofür die Zwischen-Ifs gedacht sind, ist sie leicht lesbar ein Ort und mit der gleichen Einkerbung.
Und es sollte ziemlich effizient sein.
quelle
Hier verstehe ich also, dass Sie versuchen, aus dem äußeren if-Codeblock auszubrechen
Ein Ausweg besteht darin, dass Sie im äußeren if-Block nach einer falschen Bedingung suchen können, die dann implizit aus dem Codeblock austritt. Anschließend verwenden Sie einen else-Block, um die anderen ifs zu verschachteln, um etwas zu tun
quelle
Das einzige, was dies ohne zusätzliche Methoden anwenden würde, ist
elif
das folgende Beispielquelle
Hier ist eine andere Möglichkeit, damit umzugehen. Es wird ein einzelnes Element für die Schleife verwendet, mit dem Sie einfach weiter verwenden können. Es verhindert, dass unnötige zusätzliche Funktionen ohne Grund erforderlich sind. Und eliminiert zusätzlich potenzielle unendliche while-Schleifen.
quelle
Die Verwendung
return
in der if-Bedingung gibt Sie aus der Funktion zurück, sodass Sie mit return die if-Bedingung aufheben können.quelle