Олег Марков
Вложенные функции в Python
Введение
Вложенные функции — это функции, определённые внутри других функций. Такой подход позволяет структурировать код, создавать замыкания и скрывать вспомогательные функции от внешнего окружения.
В этой статье мы разберём синтаксис вложенных функций, особенности области видимости, примеры использования и потенциальные ошибки при работе с ними.
Если вы хотите детальнее изучить работу функций, включая вложенные функции и замыкания — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Синтаксис вложенных функций
Функция внутри функции создаётся стандартным образом через def:
def outer(x):
def inner(y):
return y + 1
return inner(x)
print(outer(5)) # 6В этом примере inner существует только внутри outer и недоступна извне.
Замыкания (closures)
Вложенные функции могут сохранять доступ к переменным внешней функции после её выполнения:
def make_multiplier(factor):
def multiply(x):
return x * factor
return multiply
double = make_multiplier(2)
triple = make_multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15multiply — это замыкание, сохраняющее значение factor.
Использование вложенных функций
Локальные вспомогательные функции
def process_data(data):
def clean(text):
return text.strip().lower()
return [clean(item) for item in data]
data = [" Apple ", " Banana", "kiwi "]
print(process_data(data)) # ['apple', 'banana', 'kiwi']Вспомогательная функция clean не видна за пределами process_data, что уменьшает загрязнение глобального пространства имён.
Передача вложенной функции как объекта
def outer(x):
def inner(y):
return y ** 2
return inner
f = outer(0) # f — это функция inner
print(f(4)) # 16Такой подход полезен для фабрик функций и динамической генерации поведения.
Частые ошибки
- Попытка вызвать внутреннюю функцию вне внешней.
- Изменение внешних переменных без использования
nonlocal(для изменяемых значений). - Слишком глубокая вложенность, затрудняющая чтение кода.
Часто задаваемые вопросы
Можно ли использовать вложенные функции с декораторами? Да, вложенные функции часто используются для создания пользовательских декораторов.
Чем отличается замыкание от простой вложенной функции? Замыкание сохраняет доступ к переменным внешней функции после её завершения, а простая вложенная функция используется только во время вызова внешней функции.
Можно ли возвращать несколько вложенных функций? Да, можно возвращать их как кортеж или словарь для динамического выбора функционала.
Заключение
Вложенные функции и замыкания — мощный инструмент Python, который помогает создавать чистый, структурированный и гибкий код. Они широко применяются в фабриках функций, декораторах и функциональном программировании.
Для системного изучения функций, вложенных функций и замыканий рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев