Verschachtelte Funktionen in Python

Manav Narula 10 Oktober 2023
Verschachtelte Funktionen in Python

Eine Funktion ist ein Codeblock, der in einem Programm immer wieder aufgerufen werden kann. Es kann verschiedene Argumente akzeptieren und einen nützlichen Wert zurückgeben. In allen Programmiersprachen haben wir eingebaute Funktionen und benutzerdefinierte Funktionen.

In diesem Tutorial erfahren Sie, wie Sie in Python verschachtelte Funktionen erstellen und verwenden.

Die meisten Sprachen unterstützen die Verwendung und Erstellung von verschachtelten Funktionen. Wie der Name schon sagt, ist eine verschachtelte Funktion eine Funktion innerhalb einer Funktion. Die darin verschachtelte Funktion wird innere Funktion genannt, und die einschließende Funktion wird äußere Funktion genannt.

Im folgenden Code erstellen wir eine grundlegende verschachtelte Funktion.

def outer_f(s):
    def inner_f(s):
        print(s)

    inner_f(s)


outer_f("Nested")

Ausgabe:

Nested

Anhand des obigen Beispiels können wir uns eine kleine Vorstellung von der Verwendung von verschachtelten Funktionen machen. Sie können verwendet werden, um eine Funktion vor der Außenwelt zu verbergen und eine Datenkapselung zu implementieren.

Eine andere Sache, die Sie wissen sollten, ist, dass die verschachtelte Funktion die Variable verwenden kann, die in der äußeren Funktion verwendet wird. Solche Variablen werden als nicht-lokal bezeichnet. Verschachtelte Funktionen können darauf zugreifen, aber wenn wir sie ändern müssen, müssen wir das Schlüsselwort nonlocal verwenden.

Sehen wir uns das folgende Beispiel an.

def outer_f():
    s = 5

    def inner_f():
        nonlocal s
        s = s + 1
        return s

    return inner_f()


print(outer_f())

Ausgabe:

6

Hier könnten wir die Variable s nicht ändern, ohne das Schlüsselwort nonlocal zu verwenden.

Stellen Sie sich nun vor, die verschachtelte Funktion gibt einen Wert zurück. Dies bringt uns zu einem weiteren nützlichen Merkmal von verschachtelten Funktionen, und zwar Closure-Funktionen. Diese Funktionen werden dynamisch mit verschachtelten Funktionen erstellt. Es kann eine elegante und prägnante Möglichkeit sein, das Verstecken von Daten zu implementieren und als Alternative für Klassen zu verwenden.

Siehe den folgenden Code.

def incrementer(x):
    def inc(y):
        return x + y

    return inc


by4 = incrementer(4)
by5 = incrementer(5)

print(by4(5), by5(5))

Ausgabe:

9 10

Im obigen Code erstellen wir nun eine dynamische Methode zum Erhöhen einer Zahl. by4 und by5 sind die beiden Verschlussfunktionen, die mit der verschachtelten Funktion erstellt wurden. Dies liegt hauptsächlich an der Fähigkeit der verschachtelten Funktionen, ihren Zustand beizubehalten. Es kann eine gute Alternative zu Klassen und globalen Variablen sein, wenn nicht zu viele Attribute beteiligt sind. Mit dem Attribut __closure__ können wir herausfinden, ob eine Funktion eine Closure ist. Alle Funktionen haben dieses Attribut und geben einige Zellobjekte zurück, wenn sie mit einer Closure-Funktion verwendet werden.

Die verschachtelten Funktionen werden auch für Dekoratorfunktionen verwendet. Decorator-Funktionen verwenden ein aufrufbares Objekt wie eine Klasse, Funktion und geben ein anderes Objekt zurück. Wir verwenden das Zeichen @, um einen Dekorator vor einem solchen aufrufbaren Objekt zu verwenden. Auf diese Weise nehmen wir das Callable Object als Argument der Decorator-Funktion und verwenden es.

Um dies besser zu verstehen, erstellen wir im folgenden Beispiel eine sehr einfache Decorator-Funktion.

def dec(func):
    def inner():
        print("Hello")
        func()

    return inner


@dec
def world():
    print("world")


world()

Ausgabe:

Hello
world

Im obigen Beispiel haben wir eine einfache Dekoratorfunktion namens dec() erstellt, die die Funktion world() dekoriert, indem sie sie als Argument verwendet und eine zusätzliche Nachricht ausgibt.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Verwandter Artikel - Python Function