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

Вложената функция е просто функция в рамките на друга функция и понякога се нарича "вътрешна функция". Има много причини, поради които бихте искали да използвате вложени функции, и ще разгледаме най-често срещаните в тази статия.

Как да дефинирам вложена функция

За да дефинирате вложена функция, просто инициализирайте друга функция във функцията, като използвате 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, излезте и ги загнездете с най-доброто от тях.