J'ai récemment trébuché sur une incohérence semblable à la manière de faire face aux clauses d'autre dans différentes déclarations composées. Puisque Python est si bien conçu, je suis sûr qu'il y a une bonne explication, mais je ne peux pas y penser.
Considérez les suivants: P>
for i in some_iterator: print(i) else: print("Iterator is empty!")
3 Réponses :
Le pour sinon code> construction exécute la clause
el / code> si aucun
casse code> est exécuté pour la boucle, comme décrit ici par exemple, cette clause d'autre n'est jamais évaluée
for i in range(1,10):
if i % 5 == 0:
print i
break
else:
print "nothing divisible by 5"
Droite, donc une déclaration pour / tandis que - else n'a de sens que s'il y a une déclaration de pause quelque part.
Oui, comme l'a mentionné Eli, la clause de l'autre n'est exécutée que si vous ne cassez pas. Il vous empêche de mettre en œuvre du code comme celui-ci:
for i in range(1,10): if i % 5 == 0: print i break if i % 5 != 0: print "nothing divisible by 5"
Eh bien, cela dépend de la façon dont vous le voyez. Vous pouvez regarder les études telles que celles-ci (excusez-la, c'est le seul moyen de mettre l'accent sur le code):
if condition: do_something() elif otherconditaion: do_anotherthing() IF NO CONDITION WAS TRUE: do_something_else()
Merci. Cela a du sens et répond à ma question.
Je suis surpris Python permet la syntaxe. Dans la plupart des autres langues, il est limité à être utilisé uniquement avec des déclarations IF- ou Switch. Pour les boucles et les déclarations d'essai pourraient contrôler le flux, mais ils ne sont pas conditionnels comme une déclaration IF -ELSE, la sorte n'a donc aucune place.
Pour ce que cela vaut, il y a eu une récente discussion sur la longue discussion sur la liste des idées Python et al, résumée ici: article.gmane.org/gmane.comp.python.ideas/6131 . Guido lui-même admet avoir une deuxième réflexion à ce sujet: article.gmane.org/gmane .comp.python.ideas / 6133