Viele Python-Programmierer wissen wahrscheinlich nicht, dass die Syntax von whileSchleifen und forSchleifen eine optionale else:Klausel enthält:
for val in iterable:
do_something(val)
else:
clean_up()
Der Hauptteil der elseKlausel ist ein guter Ort für bestimmte Arten von Bereinigungsaktionen und wird bei normaler Beendigung der Schleife ausgeführt: Dh Verlassen der Schleife mit returnoder breakÜberspringen der elseKlausel; Beenden nach einem continueführt es aus. Ich weiß das nur, weil ich es gerade (noch einmal) nachgeschlagen habe , weil ich mich nie erinnern kann, wann die elseKlausel ausgeführt wird.
Immer? Bei "Ausfall" der Schleife, wie der Name schon sagt? Bei regelmäßiger Kündigung? Auch wenn die Schleife mit beendet wird return? Ich kann nie ganz sicher sein, ohne es nachzuschlagen.
Ich beschuldige meine anhaltende Unsicherheit mit der Wahl des Schlüsselworts: Ich finde elsediese Semantik unglaublich unmnemonisch. Meine Frage lautet nicht "Warum wird dieses Schlüsselwort für diesen Zweck verwendet" (für das ich wahrscheinlich stimmen würde, wenn auch nur nach dem Lesen der Antworten und Kommentare), sondern wie kann ich über das elseSchlüsselwort nachdenken, damit seine Semantik Sinn macht, und ich kann mich also daran erinnern?
Ich bin mir sicher, dass darüber ziemlich viel diskutiert wurde, und ich kann mir vorstellen, dass die Wahl aus Gründen der Übereinstimmung mit der Klausel der tryErklärung else:(die ich auch nachschlagen muss) und mit dem Ziel getroffen wurde, nicht zur Liste von hinzuzufügen Pythons reservierte Worte. Vielleicht elseklären die Gründe für die Wahl seine Funktion und machen es einprägsamer, aber ich bin, nachdem ich den Namen mit der Funktion verbunden habe, nicht nach der historischen Erklärung an sich.
Die Antworten auf diese Frage , deren Frage kurz als Duplikat geschlossen wurde, enthalten viele interessante Hintergrundgeschichten. Meine Frage hat einen anderen Schwerpunkt (wie man die spezifische Semantik von elsemit der Keyword-Auswahl verbindet), aber ich denke, es sollte irgendwo einen Link zu dieser Frage geben.
elsebedeutet im Grunde "wenn die Fortsetzungsbedingung fehlschlägt". In einer traditionellen for-Schleife ist die Fortsetzungsbedingung normalerweise i < 42. In diesem Fall können Sie diesen Teil alsif i < 42; execute the loop body; else; do that other thing
break. Der kanonische Anwendungsfall ist, wenn die Schleife nach etwas sucht und bricht, wenn sie es findet. Das elsewird nur ausgeführt, wenn nichts gefunden wird.