Автор оригинала: 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, ininner() 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, выйти и устанавливать их с лучшими из них.