← Все вопросы

Что такое замыкание (closure) в Python на пальцах?

Задан 2 месяца назад881 просмотров3 ответа
16

Слышал слово «замыкание/closure» применительно к функциям. Не могу понять, что это и зачем. Можете объяснить максимально на пальцах с простым примером?

3 ответа

28
✓ Принятый ответ — помог автору

Замыкание — это когда внутренняя функция «запоминает» переменные из внешней функции, даже после того как внешняя уже отработала и завершилась.

def make_multiplier(n):
    def multiplier(x):
        return x * n   # помнит n из внешней функции
    return multiplier

double = make_multiplier(2)
triple = make_multiplier(3)

print(double(5))  # 10
print(triple(5))  # 15

Здесь make_multiplier уже завершилась, но double всё ещё помнит, что n = 2, а triple — что n = 3. Внутренняя функция как бы «замкнула» на себе это значение — отсюда и название.

Зачем: создавать функции-настройки (как double/triple выше), фабрики функций, декораторы. По сути это лёгкая альтернатива классу, когда нужно «функция + немного запомненного состояния».

Степан Голубев это же основа декораторов получается? — да, именно · 2 месяца назад
Кирилл Борисов фабрика функций — теперь понятно где это всплывает · 2 месяца назад
11

Это внутренняя функция, которая помнит переменные внешней функции после её завершения. На этом построены декораторы.

5

Функция, запомнившая своё окружение.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект