08.10.2015       Выпуск 94 (05.10.2015 - 11.10.2015)       Колонка автора

Опыт разработчиков: замыкания (closure). Зачем и почему.

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

....

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

Читать>>




Экспериментальная функция:

Ниже вы видите текст статьи по ссылке. По нему можно быстро понять ссылка достойна прочтения или нет

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

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

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

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

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

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

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






Разместим вашу рекламу

Пиши: mail@pythondigest.ru

Нашли опечатку?

Выделите фрагмент и отправьте нажатием Ctrl+Enter.

Система Orphus