Этот бит Python не работает:
def make_incrementer(start):
def closure():
# I know I could write 'x = start' and use x - that not my point though (:
while True:
yield start
start += 1
return closure
x = make_incrementer(100)
iter = x()
print iter.next() # Exception: UnboundLocalError: local variable 'start' referenced before assignment
Я знаю, как исправить эту ошибку, но неся со мной:
Этот код отлично работает:
def test(start):
def closure():
return start
return closure
x = test(999)
print x() # prints 999
Почему я могу прочитать переменную start
внутри закрытия, но не писать в нее?
Какое языковое правило вызывает эту обработку переменной start
?
Обновление. Я нашел этот пост SO соответствующим (ответ больше, чем вопрос): Чтение/запись закрытий на Python