Изучите концепцию замыкания и способы ее реализации за несколько простых шагов.

Изучите концепцию замыкания и способы реализации замыкания за несколько простых шагов.

Если вы хотите овладеть программированием на Python, то есть одна тема, которую вы должны изучить в этом путешествии — замыкание. В этой статье мы представим с нуля, включая все необходимые знания, с практическим кодом для лучшего понимания. Давайте начнем!

1. Область действия переменной:

Чтобы понять концепцию замыкания, вы должны понять концепцию области действия переменной. Мы не будем идти на сумасшедшие угловые случаи здесь. Прежде всего, мы должны понимать глобальную область действия и локальную область действия. Глобальная область видимости означает, что если мы определим переменную a, то сможем получить к ней доступ где угодно, включая функции. См. следующее:

Здесь мы определили a и можем получить к нему доступ в функции. Однако все не работает наоборот: если мы определяем переменную b в функции, мы не можем получить к ней доступ вне функции, а b здесь — локальная переменная (или имеющая только локальную область видимости). См. пример:

2. Вложенная функция:

Концепция вложенной функции заключается в том, что мы можем определить функцию внутри функции. Область действия переменной здесь аналогична случаю, рассмотренному выше. Если мы определим переменную во внешней функции, мы сможем получить к ней доступ во внутренней функции, но не наоборот.

Это должно быть довольно интуитивно понятно из приведенного выше кода. Проверьте другой случай:

В этом месте вы можете задаться вопросом: что, если у нас есть переменная, определенная в функции, и мы хотим получить к ней доступ вне функции. Можем ли мы сделать это в Python? Ответ - да! И именно здесь происходит закрытие.

3. Первое заседание Закрытия:

Закрытие может помочь нам получить доступ к переменной внутри функции! Обычно мы добиваемся этого, написав вложенные функции. Посмотрите пример ниже:

Здесь мы сначала определяем outer и нашу переменную a. Обратите внимание, что если мы попытаемся получить доступ к a напрямую извне, Python будет жаловаться, поскольку область действия a остается только внутри outer. Однако вот что интересно: у нас есть внутренняя функция inner, и inner может получить доступ к a, как мы обсуждали в предыдущем разделе. Затем мы просто вернули функцию inner тому, кто вызывает outer . Что случится? Оказывается, мы можем вывести a, так как inner все еще может получить доступ к a!

Когда и зачем использовать замыкание в Python? Короткий ответ заключается в том, что замыкание может предоставить вам возможность реализовать какой-нибудь простой класс без написания класса и определения каких-либо глобальных переменных. Простой пример: если вы хотите написать класс экспоненциальной операции, вы можете использовать замыкание:

В этом примере мы передаем базу во внешнюю функцию exp и используем этот параметр base во внутренней функции для завершения последней операции. Замыкание обеспечивает некоторый уровень привязки данных без глобальных переменных, и именно поэтому мы используем Python.

Теперь вы понимаете концепцию замыкания и то, как использовать его во вложенных функциях. Не стесняйтесь поиграть с ним (например, можем ли мы использовать свойство замыкания, чтобы сделать простой калькулятор? Удачи вам в решении этой задачи!) Приятного обучения и удачного кодирования!

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.