Урок 62. Вложенные функции. Замыкание

📁 Блок: Python Fundamentals / Функции ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#nonlocal #global #lambda #print #def #is #not #locals #return #range #for #in #strip #lower #from #import #add #append #if #round #get #yield #with

⚡ Кратко: суть урока

Урок про вложенные функции и замыкания. Учимся прятать вспомогательную логику внутри других функций, менять переменные внешней области через nonlocal и создавать фабрики функций, которые помнят переданные им настройки.

  • Вложенная функция видит переменные внешней функции благодаря правилу LEGB.
  • Замыкание сохраняет доступ к переменным внешней функции даже после её завершения.
  • Для изменения переменной внешней области используйте nonlocal.

Что запомнить: замыкание — это функция вместе с окружением (free variables), которое она захватила.

Частая ошибка: «позднее связывание» в цикле: все замыкания получают одно и то же последнее значение переменной цикла.

О чём этот урок

В Python функции — это полноценные объекты: их можно передавать в другие функции, возвращать из них и хранить в переменных. Это открывает мощные приёмы: вложенные функции, замыкания и фабрики функций. На этом уроке мы разберём, как работает область видимости Enclosing, зачем нужно ключевое слово nonlocal и как избежать типичной ловушки позднего связывания.

Что изучим

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

📚 Что повторить перед изучением

  • ← Урок 61 — Практикум 15
  • Определение функций, параметры и возвращаемые значения.
  • Глобальные и локальные переменные, ключевое слово global.

🎯 Что изучать дальше

  • → Урок 63 — Summary session 16
  • Попробуйте применить замыкания к собственным проектам: кэширование, логгеры, настраиваемые фильтры.