Beágyazott funkciók a Pythonban

A beágyazott függvény egyszerűen egy másik függvény függvénye, és néha "belső funkciónak" is nevezik. Sok oka van annak, miért érdemes beágyazott függvényeket használni, és ebben a cikkben áttekintjük a leggyakoribbakat.

Beágyazott függvény meghatározása

Beágyazott függvény definiálásához csak inicializáljon egy másik függvényt a függvényen belül a defkulcsszó használatával:

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

Kimenet:

Hi, Quincy Larson!

Amint láthatja, a beágyazott getFullNamefüggvény hozzáfér a külső greetingfüggvény paramétereihez, firstés last. Ez a beágyazott funkciók gyakori esete - kis segítő funkcióként szolgál egy bonyolultabb külső funkcióhoz.

A beágyazott függvények használatának okai

Míg sok beható oka van a beágyazott függvények használatának, a leggyakoribbak közé tartoznak a beágyazás és a bezárások / a gyári funkciók.

Adatok beágyazása

Vannak esetek, amikor meg akarja akadályozni, hogy egy funkció vagy az ahhoz hozzáférhető adatok hozzáférjenek a kód más részeiből, így beillesztheti azt egy másik függvénybe.

Ha ilyen funkciót fészkel be, az el van rejtve a globális hatókör elől. E magatartás miatt az adatok beágyazását néha elrejtésnek vagy adatvédelemnek nevezik . Például:

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

Kimenet:

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

A fenti kódban a innerfüggvény csak a függvényen belül érhető el outer. Ha innera funkción kívülről próbál meg hívni , akkor a fenti hibaüzenetet kapja.

Ehelyett a outerfüggvényt így kell meghívnia :

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

Kimenet:

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

Zárások

De mi történne, ha a külső függvény visszaadná magát a belső funkciót, ahelyett, hogy a fenti példában leírtaknak megfelelően hívnánk? Ebben az esetben megvan az úgynevezett bezárás.

A következő feltételeknek teljesülniük kell a bezárás létrehozásához a Pythonban:

Ezek a feltételek szükségesek a bezárás létrehozásához a Pythonban:

1. Be kell ágyazott függvénynek lennie

2. A belső funkciónak egy olyan értékre kell utalnia, amelyet a mellékelt hatókör határoz meg

3. A bezáró függvénynek vissza kell adnia a beágyazott függvényt

- Forrás: //stackabuse.com/python-nested-functions/

Íme egy egyszerű példa a bezárásra:

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

Kimenet:

15

A bezárások lehetővé teszik az adatok átadását a belső funkciókhoz anélkül, hogy először átadnák azokat a külső funkcióknak olyan paraméterekkel, mint greetinga cikk elején található példa. Lehetővé teszik a belső funkció meghívását a kapszulázó külső funkción kívülről is. Mindezt a fent említett adatburkolatok / rejtőzködések előnyével.

Most, hogy megértette, hogyan és miért fészkelje be a funkciókat a Pythonban, menjen ki és fészkelje be őket a legjobbakkal.