Встречается на собеседованиях • сегодня

Что такое замыкание

Замыкание (closure) — это функция, которая запоминает окружающее её состояние (переменные из внешней области видимости) на момент своего создания, даже если это состояние потом выходит из области видимости.

Простыми словами:

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

Ключевые элементы замыкания:

- Вложенная функция (внутренняя).

- Свободная переменная (переменная из внешней области видимости, которую использует внутренняя функция).

- Возврат внутренней функции из внешней.

Пример создания замыкания

text
def outer_function(x):      # 1. Внешняя функция
    def inner_function(y):  # 2. Внутренняя функция (замыкание)
        return x + y        # 3. Использует свободную переменную `x`
    return inner_function   # 4. Возвращаем внутреннюю функцию

# Создаем замыкание
closure = outer_function(10)  # `x` = 10 "запоминается" в замыкании

# Теперь вызываем замыкание
result = closure(5)  # = 10 + 5
print(result)        # 15
text
#Пример - Фабрика функций 
def multiplier(n):
    # Замыкание запоминает множитель `n`
    def multiply(x):
        return x * n
    return multiply

# Создаем специализированные функции
double = multiplier(2)
triple = multiplier(3)

print(double(5))  # 10 (5 * 2)
print(triple(5))  # 15 (5 * 3)

Важный нюанс - Изменяемое состояние

Если нужно изменять захваченную переменную, используйте ключевое слово nonlocal:

text
def counter():
    count = 0
    def increment():
        nonlocal count  # Указываем, что count - не локальная переменная
        count += 1
        return count
    return increment

c = counter()
print(c())  # 1
print(c())  # 2 (состояние сохраняется между вызовами)

Зачем нужны замыкания?

- Сохранение состояния без использования классов.

- Создание фабрик функций с предустановленными параметрами.

- Реализация декораторов (декораторы в Python — это замыкания).

- Инкапсуляция данных и создание callback-функций.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы