Эта часть Python не работает:
def make_incrementer(start):
def closure():
# I know I could write 'x = start' and use x - that's 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 релевантным (ответ больше, чем вопрос): Read/Write Python Closures