Заметки по Python (17): замыкания

Python Технологии Nuggets призывают к публикации
Заметки по Python (17): замыкания

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~

Закрытие

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

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

Условия закрытия:

  1. Внутренняя функция определяется во внешней функции
  2. Внешние функции имеют возвращаемые значения
  3. Возвращаемое значение: внутренняя функция
  4. Внутренняя функция также ссылается на переменные внешней функции.

Формат следующий:

def 外部函数():
    ...
    def 内部函数():
        ...
    return 内部函数

образец кода

def func():
    a = 100

    def inner_func():
        b = 200
        print(a, b)

    return inner_func


x = func()
print(x)  # <function func.<locals>.inner_func at 0x0000021704CD9620>
x()  # 100 200
# 这样就可以直接调用inner_func函数,如果return不返回一个内部函数的话是不会有任何输出的

Использование замыканий также может дополнить эффект счетчика.

def generate_count():
    container = [0]

    def add_one():
        container[0] += 1
        print(f"这是第{container[0]}次调用")

    return add_one


count = generate_count()
count()  # 这是第1次调用
count()  # 这是第2次调用
count()  # 这是第3次调用

закрытонедостатокСледующее:

  1. Сфера не так интуитивна
  2. Поскольку переменные не собираются мусором, существует определенный объем памяти.

закрытоэффектСледующее:

  1. Может использовать родственную область видимости
  2. Чтение внутренних переменных других элементов
  3. расширить сферу