Python -Schließungen

Python -Schließungen
Wir müssen die verschachtelten Funktionen und die nicht lokalen Variablen verstehen, bevor wir verstehen können, was Python-Schließung ist.

Die in Python geschriebenen Funktionen gelten als erstklassige Objekte. Der äquivalente Status der anderen Objekte wird den Funktionen in Python vergeben. Funktionen können dynamisch erstellt und zerstört werden, Variablen zugeordnet, in Sammlungen gespeichert, als Argumente und mehr geliefert werden. Der Begriff „verschachtelte Funktionen“, manchmal als „innere Funktionen“ bezeichnet, bezieht sich auf Funktionen, die in den anderen Funktionen definiert sind.


Es handelt sich um eine verschachtelte Funktion namens Build -Nachricht. Seine äußere Hauptfunktion ist dort, wo es definiert und aufgerufen wird.

In seiner grundlegendsten Form ist der Verschluss nur eine verschachtelte Funktion, die Zugriff auf eine freie Variable hat, die nach der Ausführung einer umschließenden Funktion abgeschlossen ist. Ein Python -Verschluss hat diese drei Eigenschaften:

    • Es ist in der Funktion verschachtelt.
    • Es kann auf eine kostenlose Variable außerhalb seines Geltungsbereichs zugreifen.
    • Die umgebende Funktion gibt es zurück.

Jede Variable, die im örtlichen Bereich ungebunden ist. Das nicht-lokale Schlüsselwort ist erforderlich, damit Verschlüsse mit unveränderlichen Variablen wie Zeichenfolgen und Ganzzahlen funktionieren, um zu funktionieren. Python -Schließungen bieten eine Art Datenmaskierung und helfen bei der Vermeidung der Verwendung globaler Variablen.

Variablenbereich

Wir müssen auch den variablen Python -Bereich kennenlernen, um die Schließungen ausführlicher zu verstehen. Der Bereich ist ein solcher Bereich, in dem die Variable beobachtet werden kann. Es kann nur der angegebene Bereich einer Variablen verwendet werden. Nach den drei verschiedenen Bereichen können Variablen häufig an drei getrennten Stellen zugewiesen werden:

    • Globaler Umfang: Definition einer Variablen, wenn sie außerhalb aller Funktionen liegt. Jede Funktion im Code kann problemlos eine globale Variable verwenden.
    • Lokaler Bereich: Eine Variable ist lokal zu einer Funktion, wenn sie darin deklariert wird. Auf eine lokale Variable kann nur aus den Grenzen dieser Funktion zugegriffen werden, in der sie deklariert wird.
    • Nicht lokaler Umfang: Eine zugewiesene Variable ist nicht lokal gegenüber ihren verschachtelten Funktionen, wenn sie in der Umgebung verwendet wird. Die Funktion, in der eine nichtlokale Variable definiert wurde, und alle ihre inneren Funktionen können auf diese Variable zugreifen.

Warum Schließungen verwenden??

Die Hauptgründe, warum wir Dekorateure einstellen, sind in der folgenden Liste umrissen:

    • Die Tatsache, dass Python -Schließungen eine Form von Datenmaskierung bieten, da Rückruffunktionen einer der wichtigsten Vorteile der Verwendung von ihnen sind. Folglich wird die Nutzung globaler Variablen verringert
    • Die Codegröße kann unter bestimmten Umständen durch Verwendung der Schließungen und nicht unter Klassen verringert werden.
    • Wenn Sie hartcodierte Konstanten ersetzen, sind Schließungen eine gute Wahl.
    • Die dekorative Funktion von Schließungen ist sehr vorteilhaft.

Wann schafft Python den Verschluss??

Python erstellt jedes Mal, wenn eine Funktion aufgerufen wird. Python erzeugt zusätzlich einen frischen Verschluss, wenn diese Funktion einen erzeugt.


Erstellen Sie eine Funktion namens Multiplikator, die zuerst eine Schließung erzeugt. Die Multiplikation von zwei Eingängen ist die Multiplikatorfunktion zurück. Aber es verwendet eine Schließung anstelle davon. Fügen Sie als nächstes drei Aufrufe zur Multiplikatorfunktion hinzu. Drei Schließungen werden durch Aufrufen dieser Funktionen erzeugt. Eine Zahl wird mit jeder Funktion mit 2, 4 und 5 multipliziert. Dann führen Sie die Funktionen der Schließungen aus.

Beispiel 1:

Um eine innere Funktion von außerhalb der äußeren Funktion aufzurufen, müssen wir zunächst herausfinden, wie. Diese Methoden können einen Wert zurückgeben. Hier sind „T“ und „U“ lokale Variablen der Funktion f ().


Da auf die Variablen „T“ und „U“ nach dem Ausführen von H = f () nicht mehr zugegriffen werden können, sind alle Variablen von F (lokal) verschwunden. Wir behalten jedoch immer noch den "T" -Werwert, der zurückgegeben und in H gespeichert wurde. Wir könnten daher in der Lage sein, die äußere Funktion die Innenfunktion zurückzugeben. Pythons erstklassige Funktionen machen es dafür machbar. Dies impliziert, dass Sie sie den Variablen zuweisen können, da Python die Funktionen als Werte interpretiert, sie als Funktionsargumente bereitstellen oder eine andere Funktion zurückgeben.

Beispiel 2:

Dieses Beispiel zeigt, dass die innere Funktion „G“ durch die äußere Funktion f (t) zurückgegeben wird.


Die Funktion G () wird nun durch den Ausdruck F (t) zurückgegeben. Durch die Zuweisung des Wertes von „G“ zu „H“, wenn wir h = f (i) schreiben, kann „H“ jetzt als „G“ angesehen werden und Gs Argument annehmen. H (j) ist gleichbedeutend mit dem Aufrufen von "G" als Ergebnis (j).

Beispiel 3:

Die Funktion G (), nicht ein bestimmter Wert davon, ist das, was f (t) zurückgibt. Berücksichtigen Sie diese Instanz dafür und schreiben Sie Folgendes:


Dieser Code gibt einen Fehler zurück. Es bedeutet, dass wir auf einen Fehler gestoßen sind. Wir können "H" nicht verwenden, um eine Funktion aufzurufen, da wir das Ergebnis von G (u) aus F (t) zurückgeben, was ein Grund für den Fehler ist.

Beispiel 4:

Wir müssen f (a) in „H“ nicht behalten. Die Alternative besteht darin, F (a) direkt (b) anzurufen. Betrachten Sie die folgende Abbildung:


Die Notwendigkeit, einen Unterschied zwischen f (a, b) und f (a) zu machen, muss immer im Auge behalten werden (B). Es erfordert zwei Parameter, um die Funktion F (a, b) aufzurufen. Die Funktion f (a) (b) hingegen ist eine Reihe von verschachtelten Funktionen, von denen jeder nur einen Eingang akzeptiert. Diese als unary Funktion bezeichnete Funktionsart akzeptiert nur eine Eingabe. Folglich ist f (a) (b) eine Reihe von zwei verschachtelten Unary -Funktionen. Also wird f (a) zuerst bewertet. Um diese Funktionen miteinander zu ketten, sollte f (a) eine Funktion zurückgeben. Hier gibt es die interne Funktion "G" zurück. Folglich f (a) (b) = g (b).

Beispiel 5:

Die Verwendung einer längeren Reihe von Unary -Funktionen ist einfach möglich, indem der aktuelle Ansatz erweitert wird. Die drei verschachtelten Unary -Funktionen können auch in diesem Fall gesehen werden. Die erste Funktion, F (t), hat eine Funktion darin, die als G (U) bezeichnet wird, und G (U) hat eine Funktion, die als h (v) bezeichnet wird. Jede innere Funktion wird durch ihre äußere Funktion zurückgegeben.


Hier definieren wir die Funktionen. Diese Funktionen geben die Werte zurück. Als nächstes initialisieren wir drei Variablen und weisen ihnen drei verschiedene ganze Zahlen zu. Dann nennen wir diese Variablen die Funktionsattribute der Funktionen.

Beispiel 6:

Angenommen, es gibt einige nichtlokale Variablen in der äußeren Funktion. Mal sehen was passiert.


Das Ausführen zeigt, dass es reibungslos funktioniert und dass G (U) Zugriff auf „T“ und „V“ hat. Wie ist es jedoch überhaupt denkbar? Jetzt, da wir außerhalb von Fs Geltungsbild (T) liegen, sollten „T“ und „V“ nach der Durchführung von F (T) nicht erreichbar sein. Warum kann G (u) immer noch auf sie zugreifen?? Aus dem Grund ist G (u), die innere Funktion, jetzt eine Schließung.

Beispiel 7:

Ändern wir die in dieser Instanz verwendete interne Funktion.


Wenn das passiert, kann es nicht mehr als Schließung bezeichnet werden. Die Erklärung ist, dass G (u) nicht auf die nichtlokalen Variablen "T" und "V" zugreift. Daher ist G (u) nicht erforderlich, um sie aufzuzeichnen.

Beispiel 8:

In diesem Fall werden wir sehen, ob wir die Werte von zwei Parametern der Funktionen gleich einstellen, dann wird diese Funktion auf eine Schließung oder nicht festgelegt.


Noch einmal ist „T“ nur erforderlich, um in diesem Fall „u“ zu initialisieren. Daher ist G (u) keine Schließung, da „G“ nicht „t“ deklarieren muss.

Abschluss

In diesem Leitfaden sprachen wir über den Pythonverschluss. Wir haben auch die verschiedenen Codes im Zusammenhang mit diesem Thema ausgeführt. Wir benötigen eine Funktion innerhalb des Verschlusses, um Folgendes zu definieren:

    • Die äußere Funktion muss sie zurückgeben.
    • Einige der nicht lokalen Variablen der äußeren Funktion sollten davon erfasst werden. Diese Variablen können entweder direkt zugegriffen werden, als nichtlokale Variablen deklariert oder durch eine verschachtelte Schließung erfasst werden müssen.

Mit anderen Worten, eine Funktion und ein erweiterter Umfang mit freien Variablen werden beide als Schließungen angesehen. Das Aufrufen der äußeren Funktion, um die Schließung zurückzugeben, ist erforderlich, nachdem die Schließung erklärt wurde, um sie zu initialisieren.