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

Вложенные функции в Python

Автор оригинала: FreeCodeCapm Team.

Вложенная функция – это просто функция в другой функции, и иногда называют «внутренней функцией». Есть много причин, по которым вы хотели бы использовать вложенные функции, и мы перейдем на наиболее распространенные в этой статье.

Как определить вложенную функцию

Чтобы определить вложенную функцию, просто инициализируйте другую функцию в функции, используя def ключевое слово:

def greeting(first, last):
  # nested helper function
  def getFullName():
    return first + " " + last

  print("Hi, " + getFullName() + "!")

greeting('Quincy', 'Larson')

Выход:

Hi, Quincy Larson!

Как видите, вложенные GetFullname Функция имеет доступ к внешней приветствие Параметры функции, Первый и Последнее Отказ Это распространенное использование для вложенных функций – служить небольшим помощником функции более сложной внешней функции.

Причины использовать вложенные функции

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

Инкапсуляция данных

Есть времена, когда вы хотите предотвратить доступу функции или данные, которые он имеет доступ к доступе с других частей вашего кода, так что вы можете Инкапсулировать Это внутри другой функции.

Когда вы устанавливаете такую функцию, это скрыто от глобальной массы. Из-за этого поведения инкапсуляция данных иногда называют Скрытие данных или Конфиденциальность данных Отказ Например:

def outer():
  print("I'm the outer function.")
  def inner():
    print("And I'm the inner function.")
  inner()

inner()

Выход:

Traceback (most recent call last):
  File "main.py", line 16, in 
    inner()
NameError: name 'inner' is not defined

В коде выше, Внутренний Функция доступна только из функции внешний Отказ Если вы попытаетесь позвонить Внутренний С внешней функции вы получите ошибку выше.

Вместо этого вы должны позвонить в внешний Функция такая:

def outer():
  print("I'm the outer function.")
  def inner():
    print("And I'm the inner function.")
  inner()

outer()

Выход:

I'm the outer function.
And I'm the inner function.

Закрытие

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

Ниже приведены условия, которые должны быть выполнены, чтобы создать закрытие в Python:

Это условия, необходимые для создания закрытия в Python:

Вот простой пример закрытия:

def num1(x):
  def num2(y):
    return x + y
  return num2

print(num1(10)(5))

Выход:

15

Замыкание позволяет передавать данные во внутренние функции, не сначала передавая их на внешние функции с параметрами, такими как приветствие Пример в начале статьи. Они также позволяют вызвать внутреннюю функцию из-за внешней функции инкапсулирующей внешней функции. Все это с преимуществом данных инкапсуляции/скрытия ранее.

Теперь, когда вы понимаете, как и зачем гнездить функции в Python, выйти и устанавливать их с лучшими из них.