No estoy preguntando sobre las reglas de alcance de Python; En general, entiendo cómo funciona el alcance en Python para bucles. Mi pregunta es por qué las decisiones de diseño se tomaron de esta manera. Por ejemplo (sin juego de palabras):
for foo in xrange(10):
bar = 2
print(foo, bar)
Lo anterior imprimirá (9,2).
Esto me parece extraño: 'foo' en realidad solo controla el bucle, y 'bar' se definió dentro del bucle. Puedo entender por qué podría ser necesario acceder a 'bar' fuera del bucle (de lo contrario, los bucles tendrían una funcionalidad muy limitada). Lo que no entiendo es por qué es necesario que la variable de control permanezca dentro del alcance después de que salga el bucle. En mi experiencia, simplemente abarrota el espacio de nombres global y hace que sea más difícil rastrear errores que los intérpretes podrían detectar en otros idiomas.
for
bucle atempere su espacio de nombres global, envuélvalo en una función. Cierres en abundancia!