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 def
Schlü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 getFullName
Funktion Zugriff auf die greeting
Parameter der äußeren Funktion first
und 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 inner
Funktion nur innerhalb der Funktion verfügbar outer
. Wenn Sie versuchen, inner
von außerhalb der Funktion aufzurufen , wird der obige Fehler angezeigt.
Stattdessen müssen Sie die outer
Funktion 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 sein2. 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 greeting
Beispiel 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.