В синтаксисе Python один и тот же символ или конструкция часто используется для разных целей Возможно вы встречались с подобным кодом:

def outer_func(x):
    def inner_func(y):
        # inner_func замкнуло в себе х
        return y + x
    return inner_func

Похож на декоратор. Это называется замыканием. Это более общий случай декоратора. Смысл замыкания состоит в том, что определение функции "замораживает" окружающий её контекст на момент определения. Это может делаться различными способами, например, за счёт параметризации создания функции

Такой подход позволяет: Устранить жестко кодированные константы Убрать глобальные переменные из кода Увеличить производительность Если первые два пункта весьма понятны, то третий поясню. В Python загрузка переменных в SCOPE (локальную область) долгий процесс (сравнительно), поэтому чем реже это делается - тем быстрее код. Пример: функция, которая делает insert в базу данных. Можно объявить коннект в замыкании и использовать.

Есть один нюанс. В Питоне замкнутые переменные доступны только для чтения. Чтобы обойти такое ограничение, нужно замыкать переменные в изменяемые переменные, например, в список. Сами замкнутые переменные нельзя будет перезаписывать, а вот содержимое контейнера - пожалуйста.

Замкнемся на ссылки:



Комментарии