Рубрики
Без рубрики

Закрытие в Python – практическая ссылка

В этом руководстве мы увидим, что находятся в Python, когда они существуют, и как мы их используем.

Автор оригинала: Pankaj Kumar.

В этом руководстве мы увидим, что находятся в Python, когда они существуют, и как мы их используем.

Чтобы понять концепцию закрытия, нам нужно понять некоторые основные концепции, такие как Вложенные функции и Бесплатные переменные Отказ

Тогда мы увидим реализацию закрытия в Python, условия для закрытия в существование и преимущества использования закрытий.

Что такое вложенная функция в Python?

Вложенные функции в Python являются функциями, которые определены в другой функции. Ниже приведен пример вложенной функции.

Здесь nested_function () определяется в локальном объеме Suree_function () и можно назвать только в пределах одной масштабы, если он не возвращается Surecl_function во время функции вызов.

#nested function example

def outer_function():
    x=10
    print("It is outer function which encloses a nested function")
    def nested_function():
        print("I am in nested function and I can access x from my enclosing function's scope. Printing x")
        print(x)
    nested_function()
#Execution
outer_function() 

Выход:

It is outer function which encloses a nested function
I am in nested function and I can access x from my enclosing function's scope. Printing x
10

Мы видим, что вложенная функция может получить доступ к переменной от его ограждения. Когда Surecl_function называется, он определяет nested_function И в конце концов вызывает, что печатает значение x.

Важным моментом, чтобы иметь в виду, что функции являются объектами первого класса в Python; I.e. Функции могут быть переданы в качестве параметров, возвращенные из других функций и назначаются любой переменной.

Что такое бесплатная переменная?

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

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

х Бесплатная переменная в приведенном выше примере. Здесь nested_function может ссылаться х Поскольку функция имеет доступ к переменным, определенным в объеме, где он определен.

Что находятся в Python?

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

Замыкание используют вложенные функции и бесплатные переменные в их реализации.

Не нужно, чтобы внешняя функция была жива, когда вложенная функция выполнена I.E. Переменные в объеме внешней функции могут не быть в памяти, еще вложенные функции могут иметь доступ к нему доступ.

Таким образом, данные прикреплены к коду и даже не присутствуют в памяти, а затем используются вложенные функции.

Каковы условия для замыкания в Python, чтобы существовать?

Из описания выше, мы можем легко идентифицировать, что для существования в Python в Python.

  • Нам нужно иметь вложенные функции.
  • Вложенная функция должна ссылаться на переменные, определенные в его внешней области, то есть внешняя функция.
  • Третье и самое важное условие закрытия для существа состоит в том, что внешняя функция должна вернуть вложенную функцию.

Пример закрытия в Python

Давайте увидим один пример для закрытия в Python. Предположим, что мы хотим иметь функцию, которая выполняет расчет по номеру, переданному ему, и печатает результат.

#closure example
def generate_number():
    print("I am in generate_number function and will return the inner_function when called")
    x=999
    y=100
    def inner_function(number):
        result=(number*x)%y
        print("I am in inner function and printing the result")
        print(result)
    return inner_function

#execute
print("Calling generate_number")
do_something = generate_number()
print("Calling do_something")
do_something(77)

Выход

Calling generate_number
I am in generate_number function and will return the inner_function when called
Calling do_something
I am in inner function and printing the result
23

В приведенном выше примере,

  • Функция generate_number () определен, что имеет две переменные и функцию Inner_function Определяется в этом масштабе.
  • Inner_function имеет доступ к переменным х и y которые находятся в объеме функции generate_number Отказ Он выполняет расчет и распечатывает результат.
  • Теперь во время выполнения, когда мы называем generate_number () Функция, она завершает его выполнение и возвращает Inner_function к переменной do_something Отказ
  • На данный момент исполнение generate_number перебирается, и это обладает схваткой из памяти (См. Коллекция мусора Python ) Отказ
  • Теперь do_something Переменная начинает действовать как функция.
  • Когда мы называем эту функцию, она выполняет Inner_function и печатает результат.

Здесь, как можно отметить, это то, что Inner_function выполняется в то время как generate_number закончил это исполнение.

Благодаря этому, переменные х и y Не в памяти, все еще внутренняя функция смогла использовать переменные.

Это показывает, что Данные были прикреплены к коду вместо памяти. Это сущность закрытия.

Почему мы должны использовать закрытие в Python?

Закрытия в Python могут использоваться, если мы хотим воздерживаться от использования глобальных переменных, и, таким образом, можно использовать для скрытия данных. Очень хорошее использование закрытий сделано, когда декораторы реализованы.

Заключение

Хорошо, и это за день. Мы охватываем много базовых и продвинутых учебных пособий в Python для ваших нужд. Если вы начинаете, попробуйте это Учебник Python для начинающих Отказ Счастливое обучение! 🙂.