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