Замыкания

Замыкания

@ProgHelpBot
  1. Замыкание
  2. Применение параметров

Замыкание

Представляет функцию, которая запоминает свое лексическое окружение даже в том случае, когда она выполняется вне своей области видимости. Включает в себя три компонента:

  • Внешняя функция, которая определяет некоторую область видимости и в которой определены некоторые переменные и параметры;
  • Переменные и параметры (лексическое окружение), которые определены во внешней функции;
  • Вложенная функция, которая использует переменные и параметры внешней функции.

Для определения замыкания применяются локальные функции.

def outer():  # внешняя функция
  n = 5  # лексическое окружение

  def inner():  # вложенная функция
    nonlocal n
    n += 1  # операции с лексическим окружением
    return n

  return inner  # внешняя функция возвращает вложенную


fn = outer()  # fn = inner(), т.к. outer() возвращает inner()
print(fn())  # 6
print(fn())  # 7
print(fn())  # 8

Применение параметров

Кроме внешних переменных к лексическому окружению также относятся параметры окружающей функции.

def multiply(n):
  def inner(m):
    return n * m

  return inner


fn = multiply(5)
print(fn(5))  # 25
print(fn(6))  # 30
print(fn(7))  # 35

Этот код можно сократить с помощью лямбд.

def multiply(n): return lambda(m): n * m


fn = multiply(5)
print(fn(5))  # 25
print(fn(6))  # 30
print(fn(7))  # 35


← Область видимости переменных

→ Декораторы

Report Page