Je ne pose pas de questions sur les règles de portée de Python; Je comprends généralement comment la portée fonctionne en Python pour les boucles. Ma question est de savoir pourquoi les décisions de conception ont été prises de cette manière. Par exemple (sans jeu de mots):
for foo in xrange(10):
bar = 2
print(foo, bar)
Ce qui précède imprimera (9,2).
Cela me semble étrange: «foo» ne contrôle que la boucle, et «bar» a été défini à l'intérieur de la boucle. Je peux comprendre pourquoi il pourrait être nécessaire que «bar» soit accessible en dehors de la boucle (sinon, les boucles for auraient des fonctionnalités très limitées). Ce que je ne comprends pas, c'est pourquoi il est nécessaire que la variable de contrôle reste dans la portée après la sortie de la boucle. D'après mon expérience, cela encombre simplement l'espace de noms global et rend plus difficile la recherche des erreurs qui seraient détectées par des interprètes dans d'autres langues.
for
boucle encombre votre espace de noms global, enveloppez-la dans une fonction. Des fermetures à gogo!