No estoy preguntando sobre las reglas de alcance de Python; Por lo 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):Scoping en bucles "for" de Python
for foo in xrange(10):
bar = 2
print(foo, bar)
Lo anterior se imprimirá (9,2).
Esto me parece extraño: 'foo' realmente solo controla el ciclo, y 'bar' se definió dentro del ciclo. Puedo entender por qué podría ser necesario que 'bar' fuera accesible 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 en el alcance después de que termine el ciclo. En mi experiencia, simplemente satura el espacio de nombres global y hace que sea más difícil rastrear los errores que podrían atrapar los intérpretes en otros idiomas.
Si no desea que el bucle 'for' abarrote su espacio de nombres global, envuélvalo en una función. Cierres en abundancia! – jathanism
A menos que esté ejecutando un bucle en el espacio de nombres global (poco común), está abarrotando un espacio de nombres * local *. –
Si esto no existiera, ¿cómo continuarías procesando más tarde en el punto que dejaste dentro del ciclo? Simplemente defina la variable de control * antes de * el ciclo? – endolith