In diesem Artikel erklären wir Ihnen, was Generatoren und Dekoratoren in Python sind.
Generatoren sind seit ihrer Einführung in PEP 255 ein wichtiger Bestandteil von Python.
Ein Generator in Python ist eine spezielle Routine, mit der das iterative Verhalten einer Schleife gesteuert werden kann. Generatoren sind wie Funktionen, die Arrays zurückgeben. Der Generator verfügt über einen Parameter, den wir aufrufen und eine Zahlenfolge generieren können. Aber im Gegensatz zu Funktionen, die ein ganzes Array zurückgeben, generieren Generatoren Werte einzeln und benötigen weniger Speicher.
Jede Python-Funktion mit dem Schlüsselwort „yield“ kann als Generator bezeichnet werden. Eine normale Python-Funktion beginnt mit der Ausführung in der ersten Zeile und wird fortgesetzt, bis wir eine Return-Anweisung oder eine Ausnahme erhalten oder die Funktion endet. Allerdings werden alle während des Funktionsumfangs erstellten lokalen Variablen zerstört und es kann nicht mehr darauf zugegriffen werden. Wenn ein Generator auf das Schlüsselwort yield trifft, wird der Status der Funktion eingefroren und alle Variablen werden im Speicher gespeichert, bis der Generator erneut aufgerufen wird.
Wir können Generatoren verwenden, die auf Iteratoren basieren, oder sie explizit mit dem Schlüsselwort „next“ aufrufen.
Normalerweise ein Generator in Python -
Verwenden Sie die Def-Schlüsselwortdefinition
Verwenden Sie das Schlüsselwort „Yield“
Kann mehrere Umsatz-Keywords enthalten.
Gibt einen Iterator zurück.
Generatoren sind Funktionen, die IterableGeneratorobjekte zurückgeben. Da die Werte im Generatorobjekt einzeln abgerufen werden und nicht die gesamte Liste auf einmal, können Sie eine for-Schleife, die Funktion next() oder list() verwenden, um die tatsächlichen Werte abzurufen.
Generatoren können mithilfe von Generatorfunktionen und Generatorausdrücken erstellt werden.
Eine Generatorfunktion ähnelt einer regulären Funktion, gibt jedoch keinen Wert zurück, sondern verfügt über das Schlüsselwort yield.
Um eine Generatorfunktion zu erstellen, fügen Sie das Schlüsselwort yield hinzu. Das folgende Beispiel zeigt, wie eine Generatorfunktion geschrieben wird.
Generatoren mit Iteratoren
# creating a function def generatorExample(): yield "T" yield "U" yield "T" yield "O" yield "R" yield "I" yield "A" yield "L" yield "S" # calling the generatorExample() function which is created above result = generatorExample() # Traversing in the above result(generator object) for k in result: # Printing the corresponding value print(k)
T U T O R I A L S
Lesen Sie den Ausgabewert vom Generator
Mit den Methodenlist(), for-loop und next() können Werte aus Generatorobjekten gelesen werden.
next() gibt das nächste Element in einer Liste, einem Array oder einem Objekt zurück. Wenn die Liste leer ist und next() aufgerufen wird, gibt es einen Fehler mit dem Signal stopIteration zurück. Dieser Fehler weist darauf hin, dass die Liste keine weiteren Einträge enthält.
# creating a function that accepts a number as an argument def oddNumbers(num): # traversing till that number passed for i in range(num): # checking whether the iterator index value is an odd number if (i%2!=0): # getting the iterator index value if the condition is true using the yield keyword yield i # calling the above function to get the odd numbers below 8 result = oddNumbers(8) # calling the next items in the result list print(next(result)) print(next(result)) print(next(result)) print(next(result)) # throws an error since the list has no more elements print(next(result))
1 3 5 7 Traceback (most recent call last): File "main.py", line 17, in <module> print(next(result)) StopIteration
Python bietet ein erstaunliches Tool namens Decorator zum Hinzufügen von Funktionen zu vorhandenem Code.
Dies wird auch Metaprogrammierung genannt, da ein Teil des Programms versucht, einen anderen Teil des Programms zur Kompilierungszeit zu ändern.
Ein Dekorateur verwendet eine Funktion als Parameter in einer anderen Funktion und ruft diese Funktion dann innerhalb der Wrapper-Funktion auf.
@tutorials_decorator def python_decorator(): print("Hello tutorials Point") '''Above code is equivalent to - def python_decorator(): print("Hello tutorials Point") python_decorator = tutorials_decorator(python_decorator)'''
Der „tutorials_decorator“ hier ist eine „aufrufbare“ Funktion, die etwas Code über einer anderen „aufrufbaren“ Funktion „python_decorator“ hinzufügt und eine Wrapper-Funktion zurückgibt. Beispiel Hierfunc ist die dekorierte Funktion, p>python_decorator
# defining a decorator def python_decorator(func): def wrapper(): print("Text before calling the function") func() print("Text after calling the function") return wrapper def tutorials_decorator(): print("Hello tutorials Point!!!") tutorials_decorator = python_decorator(tutorials_decorator) tutorials_decorator()
Ausgabe
Text before calling the function
Hello tutorials Point!!!
Text after calling the function
– Wir definieren eine weitere interne Funktion namens wrapper innerhalb der Decorator-Funktion. Dies ist die eigentliche Funktion, die die übergebene Funktion
funcändert, indem sie sie umschließt. Die Wrapper-Funktion wird vom Dekorateur zurückgegeben. tutorials_decorator – Dies ist eine normale Funktion, die wir dekorieren müssen. Drucken Sie hier einfach eine einfache Erklärung aus.
Syntax Decorator
Das oben beschriebene Dekorationsmuster ist in der Python-Community beliebt, aber etwas kompliziert. Wir müssen den Funktionsnamen dreimal schreiben und die Dekoration wird unter der Funktionsdefinition ausgeblendet. Daher hat Python eine neue Möglichkeit zur Verwendung von Dekoratoren hinzugefügt, einschließlich syntaktischem Zucker durch die Verwendung des
@-SymbolsGrammatik
@decorator def func(arg1, arg2, ...): pass
Syntaktischer Zucker ist eine Syntax, die in Programmiersprachen verwendet wird, um das Lesen oder Ausdrücken von Inhalten zu erleichtern. Beispiel
# defining a decorator def python_decorator(func): def wrapper(): print("Text before calling the function") func() print("Text after calling the function") return wrapper @python_decorator def tutorials_decorator(): print("Hello tutorials Point!!!") tutorials_decorator()
Ausgabe
Text before calling the function Hello tutorials Point!!! Text after calling the function
anstelle von
verwendentutorials_decorator = python_decorator(tutorials_decorator)
In diesem Artikel haben wir einen kurzen Blick auf Generatoren und Dekoratoren in Python geworfen. Wir haben auch gezeigt, wie man beim Schreiben von Code Generatoren und Dekoratoren verwendet.
Das obige ist der detaillierte Inhalt vonWas sind Generatoren und Dekoratoren in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!