Viele Python-Programmierer wissen wahrscheinlich nicht, dass die Syntax von while
Schleifen und for
Schleifen eine optionale else:
Klausel enthält:
for val in iterable:
do_something(val)
else:
clean_up()
Der Hauptteil der else
Klausel ist ein guter Ort für bestimmte Arten von Bereinigungsaktionen und wird bei normaler Beendigung der Schleife ausgeführt: Dh Verlassen der Schleife mit return
oder break
Überspringen der else
Klausel; Beenden nach einem continue
führt es aus. Ich weiß das nur, weil ich es gerade (noch einmal) nachgeschlagen habe , weil ich mich nie erinnern kann, wann die else
Klausel 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 else
diese 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 else
Schlü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 try
Erklärung else:
(die ich auch nachschlagen muss) und mit dem Ziel getroffen wurde, nicht zur Liste von hinzuzufügen Pythons reservierte Worte. Vielleicht else
klä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 else
mit der Keyword-Auswahl verbindet), aber ich denke, es sollte irgendwo einen Link zu dieser Frage geben.
else
bedeutet 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 else
wird nur ausgeführt, wenn nichts gefunden wird.