Python

Python-Schließungen-Tutorial

Python-Schließungen-Tutorial
Eine Closure ist eine verschachtelte innere Methode oder Funktion, die die Variablen erkennt und das Recht hat, sie zu verwenden, auch wenn die äußere Funktion in dem lokalen Gültigkeitsbereich, in dem sie erstellt wurde, abgeschlossen ist. Eine Variable muss aus einer äußeren Funktion oder einem Gültigkeitsbereich stammen und ist nicht sicher im zu verwendenden lokalen Raum begrenzt. Es gibt drei Merkmale eines Python-Closings, und zwar wie folgt:

Verschachtelte Funktion

Sie müssen zuerst verstehen, was eine verschachtelte Methode ist. Eine verschachtelte Funktion kann als eine Methode definiert werden, die in einer anderen Methode angegeben ist. Rekursive Funktionen können die Variablen des äußeren Gültigkeitsbereichs erreichen. Um die nicht-lokalen Variablen zu ändern, definieren wir sie über nicht-lokale Schlüsselwörter speziell als nicht-lokal, da sie von Natur aus schreibgeschützt sind. Sehen Sie sich also zunächst die verschachtelte Funktion an, die in Spyder Python 3 ausgeführt wird.

Wir haben zwei Funktionen definiert: die äußere und die innere. In der äußeren Funktion haben wir eine Variable mit einem Textwert darin deklariert.

def äußere_funktion()
msg = 'Hy! Ich bin Aqsa Yasin'

Diese Variable wurde in der inneren Funktion mit einer print-Anweisung ausgegeben. Dann wird die innere Funktion zurückgegeben, die eine verschachtelte Funktion ist, und danach wurde die äußere Funktion aufgerufen.

def inner_func()
drucken (Nachricht)
return inner_func()
inner_func()

Wenn Sie das Schlüsselwort return nicht verwenden, um die innere Funktion zurückzugeben, wird immer noch das gleiche Ergebnis zurückgegeben.

Wenn Sie diesen einfachen Code ausführen, wird Ihnen der Text zurückgegeben, der als Wert in der Variablen definiert ist 'Nachricht'.

Ausgabe: Hy! Ich bin Aqsa Yasin

Definieren Sie nun den gleichen Typ einer verschachtelten Funktion ohne Rückgabeschlüsselwort und übergebener Variable 'Nachricht' im Parameter, und Sie erhalten die gleiche Ausgabe.

Ausgabe: Hallo

Einfache Verschlussfunktion

Verwenden Sie den gleichen Code, mit einer kleinen Änderung in den letzten beiden Zeilen. Mit der Schnur 'Hallo', das show_msg() Methode wurde aufgerufen und die zurückgegebene Methode wurde an das Wort gebunden 'Ein weiterer'. Beim Anrufen Ein weiterer(), der Text 'Hallo' wurde noch zurückgerufen, während die show_msg() Methode wurde bereits ausgeführt. Stellen Sie sicher, dass Sie die Variable hinzufügen 'Nachricht' innerhalb der äußeren Funktion.

Wenn Sie diesen Code ausführen, wird angezeigt, dass die innere Funktion a Show(), wurde der Variablen zugewiesen 'Ein weiterer'.

Ausgabe: .anzeigen bei 0x0000020CCED4D820>

Sie können es einfach ausdrucken Name einer der Variablen zugewiesenen Funktion 'Ein weiterer' wie:

drucken (ein anderer.__Name__)

Es wird den Namen einer Funktion ausgeben.

Ausgabe: anzeigen

Wenn Sie diese Variable nun wie andere Methoden als Funktion ausführen möchten, können Sie dies tun, indem Sie Klammern hinzufügen und sie wie folgt aufrufen:

other = show_msg("Hallo")
Ein weiterer()
Ein weiterer()

Sie können das so oft anrufen, wie Sie möchten.

Wenn Sie diesen Code ausführen, wird Folgendes angezeigt:

Ausgabe:

Hallo

Hallo

Hallo

Jetzt können Sie sehen, dass sich die innere Funktion auch nach Abschluss der Ausführung der äußeren Funktion noch an die Variablen und andere Dinge erinnert, die im lokalen Raum erstellt oder definiert wurden.

Schließfunktion mit Parametern

Jetzt haben wir Parameter hinzugefügt, während wir eine Variable in der äußeren Funktion übergeben, als:

def show_msg(msg)

Der an den Parameter der äußeren Funktion übergebene Wert wird einer Variablen zugewiesen, die in dieser äußeren Funktion definiert ist als:

Nachricht = Nachricht

Übergeben Sie in der letzten Zeile einige Zeichenfolgenwerte in den neu erstellten Variablen als:

func1 = show_msg('Hallo')
func2 = show_msg('Hallo')

Nun müssen Sie diese Funktionen wie folgt aufrufen:

func1()
func2()

Sie erhalten die folgende Ausgabe, die im Spyder-Editor-Bild angezeigt wird:

In Python wird dieser Prozess, bei dem alle Daten (Hi oder Hallo für dieses Szenario) an das Skript angehängt werden, als Closure bezeichnet.

Einfache Multiplikation mit Python Closure

Wir haben zwei Funktionen definiert. Einer ist der äußere, für den ein Multiplikator definiert ist, und der innere, in dem der Wert beim Aufruf der Funktion übergeben wird. In der äußeren Funktion haben wir eine Variable mit einem darin übergebenen definierten Multiplikatorwert deklariert. Dieser Multiplikatorwert 'n' wurde mit einem Wert multipliziert 'x' das wird in der print-Anweisung an die innere Funktion übergeben. Dann wird die innere Funktion zurückgegeben, die eine verschachtelte Funktion ist, und danach wurden in den print-Anweisungen nacheinander Variablen aufgerufen called.

def out_multiply(n):
def in_multiply(x):
zurück x * n
zurück in_multiply

Jetzt hat die neue Variable einen Wert zugewiesen, der im Parameter der äußeren Funktion übergeben werden soll. Dieser Wert wird in der Variablen gespeichert 'n', das ist ein Multiplikator, der in der äußeren Funktion definiert ist:

times3 = out_multiply(3)
times5 = out_multiply(5)

Diesen Variablen werden weitere Werte zugewiesen, die im 'x' Variable, die in der inneren Funktion definiert ist und mit dem Multiplikator multipliziert werden muss 'n'. Wenn wir die Variable namens 'times' ausgeben, eine Funktion mit einem ganzzahligen Wert 'x' in Klammern zugewiesen, wird es mit dem äußeren Funktionswert multipliziert 'n'.

Der erste wird Ausgang 27 beim Ausführen der print-Anweisung, weil Variable 'n' hast 3 als Multiplikator, und wir haben gegeben 9 als eine weitere zu multiplizierende ganze Zahl.

drucken (mal3(9))

Der zweite wird Ausgang 15 beim Ausführen der print-Anweisung, weil Variable 'n' hast 3 als Multiplikator, und wir haben gegeben 5 als eine weitere zu multiplizierende ganze Zahl.

drucken (mal5(3))

Der letzte wird Ausgang 30 beim Ausführen einer print-Anweisung, weil sie rekursiv Zeiten für die Funktionsvariable aufgerufen hat. Das erste Mal hat mal 'n' haben 3 als Multiplikator, der mit Integer multipliziert wird 2. Bei der Multiplikation wird ausgegeben 6. Diese 6 wird nun als Wert verwendet und dann als Argument an die Variablenfunktion der Zeit übergeben, wobei die 'n' variabler Multiplikator ist 5. Also, wann 5 wird multipliziert mit 6 es wird ausgegeben 30.

drucken (mal 5 (mal 3 (2)))

Sie können die Ausgabe in der Konsole des Spyder-Editors sehen.

Fazit

Closures können die Verwendung globaler Werte verhindern und eine Form des Datenversteckens haben. Es könnte auch einen objekt- oder objektorientierten Ansatz für das Problem bieten. Hoffentlich können Sie sich nach dem Befolgen dieser Anleitung die Grundlagen der Python-Schließung aneignen.

Die 5 besten Arcade-Spiele für Linux
Heutzutage sind Computer ernsthafte Maschinen, die zum Spielen verwendet werden. Wenn du den neuen Highscore nicht bekommst, weißt du was ich meine. I...
Schlacht um Wesnoth 1.13.6 Entwicklung veröffentlicht
Schlacht um Wesnoth 1.13.6, das letzten Monat veröffentlicht wurde, ist die sechste Entwicklungsversion im 1.13.x-Serie und bietet eine Reihe von Verb...
So installieren Sie League of Legends auf Ubuntu 14.04
Wenn Sie ein Fan von League of Legends sind, dann ist dies eine Gelegenheit für Sie, League of Legends zu testen. Beachten Sie, dass LOL von PlayOnLin...