Je comprends comment cette construction fonctionne :
for i in range(10):
print(i)
if i == 9:
print("Too big - I'm giving up!")
break;
else:
print("Completed successfully")
Mais je ne comprends pas pourquoi else
est utilisé comme mot-clé ici, puisqu'il suggère que le code en question ne s'exécute que si l'option for
Le bloc ne se complète pas, ce qui est le contraire de ce qu'il fait ! Quelle que soit la façon dont j'y pense, mon cerveau ne peut pas progresser de façon transparente de l'élément for
à la else
bloc. Pour moi, continue
ou continuewith
serait plus logique (et j'essaie de m'entraîner à le lire comme tel).
Je me demande comment les codeurs Python lisent cette construction dans leur tête (ou à haute voix, si vous voulez). Peut-être ai-je raté quelque chose qui rendrait ces blocs de code plus facilement déchiffrables ?
38 votes
Vous pourriez le traduire par "alors" dans votre tête.
86 votes
N'oubliez pas la phrase clé du Zen de Python : "... ce chemin peut ne pas être évident au premier abord, à moins d'être néerlandais."
66 votes
Dans ma tête, je le traduis en "si pas de rupture" . Et, puisque
break
est très utilisé dans "Je l'ai trouvé" boucles, vous pouvez le traduire en "si non trouvé" ce qui n'est pas loin de ce queelse
lit0 votes
@MestreLion : Bien, mais vous devriez aussi ajouter "... ou si on continue" et ensuite c'est vraiment étrange.
0 votes
@pepr Puis le
continue
dans la dernière boucle doit être atteint avant que la fonctionbreak
. Ainsi, lebreak
n'a pas été atteint.1 votes
Cette construction for...else est utile au moins pour les cas où vous souhaitez mettre en œuvre des opérations de type get_or_create(), c'est-à-dire parcourir en boucle une structure de données et obtenir la première correspondance si aucune n'a été trouvée, puis créer une nouvelle entrée dans la structure de données.
33 votes
Je pense que la vraie question que beaucoup de gens se posent ici est "Quelle est la différence entre
for ... else foo()
et juste mettrefoo()
après la boucle for ?" Et la réponse est qu'ils se comportent différemment uniquement si la boucle contient unbreak
(comme décrit en détail ci-dessous).1 votes
Ce dont je n'étais pas sûr :
>>> for i in []: ... pass ... else: ... print 'else will run on empty list' ... else will run on empty list
- économiser les 5 minutes du prochain0 votes
C'est presque comme si
else if not break
ou (de manière équivalente)else if not (condition raising break)
2 votes
C'est une excellente explication : python-notes.curiousefficiency.org/en/latest/python_concepts/
1 votes
Pour ajouter une autre réflexion : l'utilisation de
else
dans unfor...else
est conforme à la clause d'exclusion facultative dans untry...except
. Que ce soit intuitif ou non, au moins c'est cohérent.21 votes
Un point-virgule en python... j'ai mal aux yeux... même si la syntaxe est correcte, ce n'est pas une bonne pratique.
0 votes
Poste connexe - Clause Else sur l'instruction Python while
1 votes
Presque 10 ans après que cette question ait été posée et après avoir programmé avec Python pendant 3 ans, c'est la première fois que je vois la construction "for-else", "while-else". J'espère que son utilisation peu fréquente continuera à s'évaporer. Le monde est plein de jeunes programmeurs qui vont "désindenter" le "else" pour "corriger" le bug qu'ils ont trouvé.
0 votes
En fait, je ne sais pas ce qu'est une boucle "for else" en Python. Ma recherche Google pour "python for else" m'a conduit ici. Pour tous ceux qui essaient de comprendre ce que c'est que ce truc bizarre.
else
est après unefor
boucle, lisez ici! : book.pythontips.com/fr/latest/for_-_else.html#for-else0 votes
Et.... ma réponse ajoutée : stackoverflow.com/a/66775318/4561887
2 votes
@MestreLion Veuillez ajouter votre commentaire sur "si pas de rupture" comme une réponse. Pour moi, votre commentaire était 1000x meilleur que toutes les réponses.