Вложенные функции позволяют управлять областью видимости и использовать замыкания. Рассмотрим это на кратких примерах:
1. Замыкание — Функция запоминает переменные из внешней области видимости:
def multiplier(x):
def inner(y): return x * y
return inner
print(multiplier(2)(5)) # 10
2. Изменение внешней переменной — Изменяем значение из внешней функции с помощью
nonlocal
: def counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
print(counter()()) # 1
3. Выбор поведения функции — Передаем логику внутрь функции:
def apply(op, x, y):
return (lambda a, b: a + b if op == "add" else a * b)(x, y)
print(apply("add", 2, 3)) # 5