Вкладена функція - це просто функція в межах іншої функції, яку іноді називають "внутрішньою функцією". Є багато причин, чому ви хотіли б використовувати вкладені функції, і ми розглянемо найпоширеніші в цій статті.
Як визначити вкладену функцію
Щоб визначити вкладену функцію, просто ініціалізуйте іншу функцію всередині функції, використовуючи def
ключове слово:
def greeting(first, last): # nested helper function def getFullName(): return first + " " + last print("Hi, " + getFullName() + "!") greeting('Quincy', 'Larson')
Вихід:
Hi, Quincy Larson!
Як бачите, вкладена getFullName
функція має доступ до параметрів зовнішньої greeting
функції first
та last
. Це звичайний випадок використання вкладених функцій - щоб він служив невеликою допоміжною функцією для більш складної зовнішньої функції.
Причини використання вкладених функцій
Хоча існує багато вагомих причин використовувати вкладені функції, серед найпоширеніших є інкапсуляція та закриття / заводські функції.
Інкапсуляція даних
Бувають випадки, коли ви хочете запобігти доступу функції або даних, до яких вона має доступ, з інших частин коду, тому ви можете інкапсулювати її в іншу функцію.
Коли ви вкладаєте таку функцію, вона прихована від глобальної області дії. Через таку поведінку інкапсуляцію даних іноді називають приховуванням даних або конфіденційністю даних . Наприклад:
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
У наведеному вище коді inner
функція доступна лише зсередини функції outer
. Якщо ви спробуєте зателефонувати inner
за межами функції, ви отримаєте помилку вище.
Натомість ви повинні викликати outer
функцію так:
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:
1. Повинна бути вкладена функція2. Внутрішня функція повинна посилатися на значення, яке визначено в області, що вкладається
3. Функція вкладання має повернути вкладену функцію
- Джерело: //stackabuse.com/python-nested-functions/
Ось простий приклад закриття:
def num1(x): def num2(y): return x + y return num2 print(num1(10)(5))
Вихід:
15
Закриття дозволяють передавати дані внутрішнім функціям без попередньої передачі їх зовнішнім функціям з параметрами, як greeting
приклад на початку статті. Вони також дозволяють викликати внутрішню функцію ззовні інкапсулюючої зовнішньої функції. Все це з перевагою інкапсуляції / приховування даних, згаданих раніше.
Тепер, коли ви розумієте, як і навіщо вкладати функції в Python, вийдіть і вкладіть їх із найкращими з них.