Для начала, если переменные были локальными для циклов, эти циклы были бы бесполезны для большинства программ реального мира.
В текущей ситуации:
# Sum the values 0..9
total = 0
for foo in xrange(10):
total = total + foo
print total
дает 45
. Теперь рассмотрим, как назначение работает в Python. Если переменные цикла были строго локальными:
# Sum the values 0..9?
total = 0
for foo in xrange(10):
# Create a new integer object with value "total + foo" and bind it to a new
# loop-local variable named "total".
total = total + foo
print total
дает 0
, потому что total
внутри цикла после назначения не является той же переменной, что и total
вне цикла. Это не было бы оптимальным или ожидаемым поведением.