Вот метод, который возвращает метод, который при каждом вызове возвращает следующее число Фибоначчи (0, 1, 1, 2, 3, 5, ...).
def make_fib():
j, k = 0, 1
def fib():
nonlocal j, k
result = j
j, k = k, j+k
return result
return fib
Хотя вышеприведенное работает хорошо, если я разбиваю встроенное присваивание j и k различным присваиваниям, выдается UnboundLocalError: локальная переменная 'j', на которую ссылается перед присваиванием:
def make_fib():
j, k = 0, 1
def fib():
nonlocal j, k
result = j
j = k
k = j+k
return result
return fib
Почему это так?