Ты не можешь изменять переменные замыкания простым присваиванием.
Python рассматривает присваивание как определение локальной переменной внутри тела функции и вообще не делает замыкания.
Работает нормально, печатает
Вызывает
Чтобы это заработало, нужно использовать
Оно явно сообщает интерпретатору, что присваивание не создает новую локальную переменную, а работает с переменной из замыкания:
📲 Мы в MAX
👉@BookPython
Python рассматривает присваивание как определение локальной переменной внутри тела функции и вообще не делает замыкания.
Работает нормально, печатает
2:
def make_closure(x):
def closure():
print(x)
return closure
make_closure(2)()
Вызывает
UnboundLocalError: local variable 'x' referenced before assignment:
def make_closure(x):
def closure():
print(x)
x *= 2
print(x)
return closure
make_closure(2)()
Чтобы это заработало, нужно использовать
nonlocal.Оно явно сообщает интерпретатору, что присваивание не создает новую локальную переменную, а работает с переменной из замыкания:
def make_closure(x):
def closure():
nonlocal x
print(x)
x *= 2
print(x)
return closure
make_closure(2)()
👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2