Я не спрашиваю о правилах определения Python; Я вообще понимаю, как работает область действия в Python для циклов. Мой вопрос в том, почему проектные решения были приняты таким образом. Например (без каламбура):
for foo in xrange(10):
bar = 2
print(foo, bar)
Вышеприведенное будет напечатано (9,2).
Это выглядит как странно: "foo" на самом деле просто контролирует цикл, а "bar" определен внутри цикла. Я могу понять, почему может быть необходимо, чтобы "бар" был доступен вне цикла (в противном случае для циклов была бы очень ограниченная функциональность). Я не понимаю, почему необходимо, чтобы переменная управления оставалась в области действия после завершения цикла. По моему опыту, он просто загромождает глобальное пространство имен и затрудняет отслеживание ошибок, которые могут быть уловлены переводчиками на других языках.