Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Образование · 8 июня 2026 г.
Ты не можешь изменять переменные замыкания простым присваиванием. — 8 июня 2026 г. в 06:03:40.846
Ты не можешь изменять переменные замыкания простым присваиванием. 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

