De nombreux programmeurs Python ignorent probablement que la syntaxe des while
boucles et des for
boucles comprend une else:
clause facultative :
for val in iterable:
do_something(val)
else:
clean_up()
Le corps de la else
clause est un bon endroit pour certains types d'actions de nettoyage et est exécuté à la fin normale de la boucle: c'est-à-dire, quitter la boucle avec return
ou break
sauter la else
clause; quitter après une continue
exécution. Je le sais uniquement parce que je viens de le chercher (encore une fois), parce que je ne me souviens jamais quand la else
clause est exécutée.
Toujours? Sur «échec» de la boucle, comme son nom l'indique? En cas de résiliation régulière? Même si la boucle est sortie avec return
? Je ne peux jamais être entièrement sûr sans le chercher.
Je blâme mon incertitude persistante sur le choix du mot-clé: je trouve else
incroyablement démnémonique pour cette sémantique. Ma question n'est pas "pourquoi ce mot-clé est-il utilisé à cette fin?" (Que je voterais probablement pour fermer, mais seulement après avoir lu les réponses et les commentaires), mais comment puis-je penser au else
mot - clé pour que sa sémantique ait un sens, et je peut donc s'en souvenir?
Je suis sûr qu'il y a eu beaucoup de discussions à ce sujet, et je peux imaginer que le choix a été fait par souci de cohérence avec la clause de la try
déclaration else:
(que je dois également consulter), et dans le but de ne pas ajouter à la liste des Les mots réservés de Python. Peut-être que les raisons du choix else
clarifieront sa fonction et la rendront plus mémorable, mais je suis après avoir connecté le nom à la fonction, pas après une explication historique en soi.
Les réponses à cette question , dont ma question a été brièvement clôturée comme un double, contiennent beaucoup d'histoire intéressante. Ma question a un objectif différent (comment relier la sémantique spécifique de else
avec le choix du mot clé), mais je pense qu'il devrait y avoir un lien vers cette question quelque part.
else
signifie essentiellement "si la condition de continuation échoue". Dans une boucle for traditionnelle, la condition de continuation est généralement i < 42
, dans ce cas, vous pouvez voir cette partie commeif i < 42; execute the loop body; else; do that other thing
break
. Le cas d'utilisation canonique est celui où la boucle recherche quelque chose et se rompt lorsqu'elle le trouve. Le else
n'est exécuté que si rien n'est trouvé.