Ich frage nicht nach Pythons Scoping-Regeln. Ich verstehe allgemein, wie das Scoping in Python für Schleifen funktioniert. Meine Frage ist, warum die Entwurfsentscheidungen auf diese Weise getroffen wurden. Zum Beispiel (kein Wortspiel beabsichtigt):
for foo in xrange(10):
bar = 2
print(foo, bar)
Das obige wird gedruckt (9,2).
Das kommt mir komisch vor: 'foo' steuert wirklich nur die Schleife, und 'bar' wurde innerhalb der Schleife definiert. Ich kann verstehen, warum es möglicherweise erforderlich ist, dass 'bar' außerhalb der Schleife zugänglich ist (andernfalls hätten Schleifen nur eine sehr eingeschränkte Funktionalität). Was ich nicht verstehe, ist, warum die Steuervariable nach dem Beenden der Schleife im Gültigkeitsbereich bleiben muss. Nach meiner Erfahrung ist der globale Namespace einfach unübersichtlich und es ist schwieriger, Fehler aufzuspüren, die von Dolmetschern in anderen Sprachen abgefangen würden.
for
Schleife Ihren globalen Namespace überfüllt, schließen Sie sie in eine Funktion ein. Schließungen in Hülle und Fülle!