Was sind Generatoren und Dekoratoren in Python?

王林
Freigeben: 2023-09-10 22:49:02
nach vorne
1009 Leute haben es durchsucht

Was sind Generatoren und Dekoratoren in Python?

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.

Generatorfunktion

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

Beispiel

# 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)
Nach dem Login kopieren

Ausgabe

T
U
T
O
R
I
A
L
S
Nach dem Login kopieren

Lesen Sie den Ausgabewert vom Generator

Mit den Methoden

list(), for-loop und next() können Werte aus Generatorobjekten gelesen werden.

Verwenden Sie next(), um den Wert aus dem Generatorobjekt zu lesen

Die Methode

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.

Beispiel

# 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))
Nach dem Login kopieren

Ausgabe

1
3
5
7
Traceback (most recent call last):
File "main.py", line 17, in <module>
    print(next(result))
StopIteration
Nach dem Login kopieren

Dekorateure in Python

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.

Grammatik

@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)'''
Nach dem Login kopieren

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, python_decorator

ist die Funktion, die zum Dekorieren verwendet wird

# 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()
Nach dem Login kopieren

Ausgabe

Text before calling the function
Hello tutorials Point!!!
Text after calling the function
Nach dem Login kopieren
Nach dem Login kopieren
python_decorator(func) – Dies ist eine Dekoratorfunktion; sie akzeptiert eine andere Funktion als Argument und „dekoriert“ sie, was bedeutet, dass sie sie modifiziert und die geänderte Version zurückgibt.

wrapper

– 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

@-Symbols

.

Grammatik

@decorator
def func(arg1, arg2, ...):
   pass
Nach dem Login kopieren

Syntaktischer Zucker ist eine Syntax, die in Programmiersprachen verwendet wird, um das Lesen oder Ausdrücken von Inhalten zu erleichtern. Beispiel

Das folgende Beispiel führt den gleichen Vorgang wie das vorherige Beispiel aus -

# 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()
Nach dem Login kopieren

Ausgabe

Text before calling the function
Hello tutorials Point!!!
Text after calling the function
Nach dem Login kopieren
Nach dem Login kopieren

Wie im vorherigen Beispiel, der einzige Unterschied besteht darin, dass wir

@python_decorator

anstelle von

verwenden
tutorials_decorator = python_decorator(tutorials_decorator)
Nach dem Login kopieren

Fazit

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!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!