Урок про вложенные функции и замыкания. Учимся прятать вспомогательную логику внутри других функций, менять переменные внешней области через nonlocal и создавать фабрики функций, которые помнят переданные им настройки.
Вложенная функция видит переменные внешней функции благодаря правилу LEGB.
Замыкание сохраняет доступ к переменным внешней функции даже после её завершения.
Для изменения переменной внешней области используйте nonlocal.
Что запомнить: замыкание — это функция вместе с окружением (free variables), которое она захватила.
Частая ошибка: «позднее связывание» в цикле: все замыкания получают одно и то же последнее значение переменной цикла.
О чём этот урок
В Python функции — это полноценные объекты: их можно передавать в другие функции, возвращать из них и хранить в переменных. Это открывает мощные приёмы: вложенные функции, замыкания и фабрики функций. На этом уроке мы разберём, как работает область видимости Enclosing, зачем нужно ключевое слово nonlocal и как избежать типичной ловушки позднего связывания.
Что изучим
Вложенные функции — инкапсуляция вспомогательной логики.
Область видимости Enclosing и правило LEGB.
Ключевое слово nonlocal.
Замыкания и свободные переменные (free variables).
Фабрики функций и счётчики вызовов.
Ловушка позднего связывания в замыканиях.
Современные практики: аннотации типов, functools.partial, избегание изменяемых значений по умолчанию.