Изучите концепцию замыкания и способы ее реализации за несколько простых шагов.
Изучите концепцию замыкания и способы реализации замыкания за несколько простых шагов.
Если вы хотите овладеть программированием на 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.