Indlejrede funktioner i Python

En indlejret funktion er simpelthen en funktion inden for en anden funktion og kaldes undertiden en "indre funktion". Der er mange grunde til, at du gerne vil bruge indlejrede funktioner, og vi gennemgår de mest almindelige i denne artikel.

Sådan defineres en indlejret funktion

For at definere en indlejret funktion skal du bare initialisere en anden funktion inden for en funktion ved hjælp af defnøgleordet:

def greeting(first, last): # nested helper function def getFullName(): return first + " " + last print("Hi, " + getFullName() + "!") greeting('Quincy', 'Larson')

Produktion:

Hi, Quincy Larson!

Som du kan se, har den indlejrede getFullNamefunktion adgang til den ydre greetingfunktions parametre, firstog last. Dette er en almindelig brugstilfælde for indlejrede funktioner - til at fungere som en lille hjælperfunktion til en mere kompleks ydre funktion.

Årsager til at bruge indlejrede funktioner

Mens der er mange gyldige grunde til at bruge indlejrede funktioner, er indkapsling og lukning / fabriksfunktion blandt de mest almindelige.

Datakapsling

Der er tidspunkter, hvor du vil forhindre, at en funktion eller de data, den har adgang til, åbnes fra andre dele af din kode, så du kan indkapsle den i en anden funktion.

Når du nester en funktion som denne, er den skjult fra det globale omfang. På grund af denne adfærd kaldes datakapsling undertiden data skjult eller databeskyttelse . For eksempel:

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

Produktion:

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

I koden ovenfor er innerfunktionen kun tilgængelig inden for funktionen outer. Hvis du prøver at ringe inneruden for funktionen, får du fejlen ovenfor.

I stedet skal du kalde outerfunktionen sådan:

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

Produktion:

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

Lukninger

Men hvad ville der ske, hvis den ydre funktion returnerer den indre funktion i stedet for at kalde den som i eksemplet ovenfor? I så fald ville du have det, der er kendt som en lukning.

Følgende er de betingelser, der skal opfyldes for at skabe en lukning i Python:

Dette er de betingelser, du har brug for for at oprette en lukning i Python:

1. Der skal være en indlejret funktion

2. Den indre funktion skal henvise til en værdi, der er defineret i det vedlagte område

3. Den indesluttende funktion skal returnere den indlejrede funktion

- Kilde: //stackabuse.com/python-nested-functions/

Her er et simpelt eksempel på en lukning:

def num1(x): def num2(y): return x + y return num2 print(num1(10)(5))

Produktion:

15

Lukninger gør det muligt at overføre data til indre funktioner uden først at overføre dem til ydre funktioner med parametre som greetingeksemplet i begyndelsen af ​​artiklen. De gør det også muligt at påberåbe sig den indre funktion udefra den indkapslende ydre funktion. Alt dette med fordelen ved datakapsling / skjulning nævnt før.

Nu hvor du forstår, hvordan og hvorfor du kan reden funktioner i Python, skal du gå ud og reden dem med det bedste af dem.