Verschachtelte Funktionen in Python

Eine verschachtelte Funktion ist einfach eine Funktion innerhalb einer anderen Funktion und wird manchmal als "innere Funktion" bezeichnet. Es gibt viele Gründe, warum Sie verschachtelte Funktionen verwenden möchten, und wir werden die häufigsten in diesem Artikel behandeln.

So definieren Sie eine verschachtelte Funktion

Um eine verschachtelte Funktion zu definieren, initialisieren Sie einfach eine andere Funktion innerhalb einer Funktion mit dem defSchlüsselwort:

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

Ausgabe:

Hi, Quincy Larson!

Wie Sie sehen können, hat die verschachtelte getFullNameFunktion Zugriff auf die greetingParameter der äußeren Funktion firstund last. Dies ist ein häufiger Anwendungsfall für verschachtelte Funktionen, um als kleine Hilfsfunktion für eine komplexere äußere Funktion zu dienen.

Gründe für die Verwendung verschachtelter Funktionen

Während es viele triftige Gründe gibt, verschachtelte Funktionen zu verwenden, gehören Kapselungs- und Schließungs- / Fabrikfunktionen zu den häufigsten.

Datenverkapselung

Es gibt Zeiten, in denen Sie verhindern möchten, dass auf eine Funktion oder die Daten, auf die sie Zugriff hat, aus anderen Teilen Ihres Codes zugegriffen werden kann, damit Sie sie in eine andere Funktion einkapseln können.

Wenn Sie eine Funktion wie diese verschachteln, ist sie vor dem globalen Bereich verborgen. Aufgrund dieses Verhaltens wird die Datenkapselung manchmal als Ausblenden von Daten oder Datenschutz bezeichnet . Zum Beispiel:

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

Ausgabe:

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

Im obigen Code ist die innerFunktion nur innerhalb der Funktion verfügbar outer. Wenn Sie versuchen, innervon außerhalb der Funktion aufzurufen , wird der obige Fehler angezeigt.

Stattdessen müssen Sie die outerFunktion folgendermaßen aufrufen :

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

Ausgabe:

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

Verschlüsse

Aber was würde passieren, wenn die äußere Funktion die innere Funktion selbst zurückgibt, anstatt sie wie im obigen Beispiel aufzurufen? In diesem Fall hätten Sie eine sogenannte Schließung.

Die folgenden Bedingungen müssen erfüllt sein, um einen Abschluss in Python zu erstellen:

Dies sind die Bedingungen, die Sie zum Erstellen eines Abschlusses in Python benötigen:

1. Es muss eine verschachtelte Funktion vorhanden sein

2. Die innere Funktion muss sich auf einen Wert beziehen, der im umschließenden Bereich definiert ist

3. Die umschließende Funktion muss die verschachtelte Funktion zurückgeben

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

Hier ist ein einfaches Beispiel für eine Schließung:

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

Ausgabe:

15

Verschlüsse ermöglichen die Übergabe von Daten an innere Funktionen, ohne sie zuvor mit Parametern wie im greetingBeispiel am Anfang des Artikels an äußere Funktionen zu übergeben . Sie ermöglichen es auch, die innere Funktion von außerhalb der einkapselenden äußeren Funktion aufzurufen. All dies mit dem Vorteil der zuvor erwähnten Einkapselung / des Versteckens von Daten.

Nachdem Sie nun verstanden haben, wie und warum Funktionen in Python verschachtelt werden, können Sie sie mit den Besten verschachteln.