logo

Generatoren in Python

Ein Generator in Python ist eine Funktion, die mithilfe des Schlüsselworts Yield einen Iterator zurückgibt. In diesem Artikel besprechen wir, wie die Generatorfunktion in Python funktioniert.

Generatorfunktion in Python

Eine Generatorfunktion in Python wird wie eine normale Funktion definiert, aber wann immer sie einen Wert generieren muss, tut sie dies mit Schlüsselwort „Yield“. statt zurückzukehren. Wenn der Rumpf einer Def-Datei yield enthält, wird die Funktion automatisch zu einer Python-Generatorfunktion.



Erstellen Sie einen Generator in Python

In Python können wir eine Generatorfunktion erstellen, indem wir einfach die Schlüsselwörter def und yield verwenden. Der Generator hat die folgende Syntax Python :

def function_name():  yield statement>

Beispiel:

In diesem Beispiel erstellen wir einen einfachen Generator, der drei ganze Zahlen liefert. Dann drucken wir diese Ganzzahlen mit Python for-Schleife .



Python3






Java-Tostring

# A generator function that yields 1 for first time,> # 2 second time and 3 third time> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # Driver code to check above generator function> for> value>in> simpleGeneratorFun():> >print>(value)>

>

>

Ausgabe:

1 2 3>

Generatorobjekt

Python-Generatorfunktionen geben ein Generatorobjekt zurück, das iterierbar ist, d. h. als verwendet werden kann Iterator . Generatorobjekte werden entweder durch Aufrufen der nächsten Methode des Generatorobjekts oder durch Verwendung des Generatorobjekts in einer for-in-Schleife verwendet.

Beispiel:

In diesem Beispiel erstellen wir eine einfache Generatorfunktion in Python, um Objekte mithilfe von zu generieren next()-Funktion .

Python3




# A Python program to demonstrate use of> # generator object with next()> > # A generator function> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # x is a generator object> x>=> simpleGeneratorFun()> > # Iterating over the generator object using next> > # In Python 3, __next__()> print>(>next>(x))> print>(>next>(x))> print>(>next>(x))>

>

>

Ausgabe:

1 2 3>

Beispiel:

In diesem Beispiel erstellen wir zwei Generatoren für Fibonacci-Zahlen, zunächst einen einfachen Generator und zweitens einen Generator mit a for-Schleife .

wie die Schule erfunden wurde

Python3




# A simple generator for Fibonacci Numbers> def> fib(limit):> > ># Initialize first two Fibonacci Numbers> >a, b>=> 0>,>1> > ># One by one yield next Fibonacci Number> >while> a yield a a, b = b, a + b # Create a generator object x = fib(5) # Iterating over the generator object using next # In Python 3, __next__() print(next(x)) print(next(x)) print(next(x)) print(next(x)) print(next(x)) # Iterating over the generator object using for # in loop. print(' Using for in loop') for i in fib(5): print(i)>

>

>

Ausgabe:

0 1 1 2 3  Using for in loop 0 1 1 2 3>

Python-Generator-Ausdruck

In Python ist der Generatorausdruck eine andere Möglichkeit, die Generatorfunktion zu schreiben. Es verwendet Python Listenverständnis Technik, aber anstatt die Elemente in einer Liste im Speicher zu speichern, werden Generatorobjekte erstellt.

Generatorausdruckssyntax

Der Generatorausdruck in Python hat die folgende Syntax:

(expression for item in iterable)>

Beispiel:

In diesem Beispiel erstellen wir ein Generatorobjekt, das die Vielfachen von 5 im Bereich von 0 bis 5 druckt, die auch durch 2 teilbar sind.

Python3




# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)>

>

>

Ausgabe:

0 10 20>

Anwendungen von Generatoren in Python

Angenommen, wir erstellen einen Strom von Fibonacci-Zahlen. Mit dem Generatoransatz wird dies trivial. Wir müssen nur next(x) aufrufen, um die nächste Fibonacci-Zahl zu erhalten, ohne uns darum zu kümmern, wo oder wann der Zahlenstrom endet. Eine praktischere Art der Stream-Verarbeitung ist die Verarbeitung großer Datendateien wie Protokolldateien. Generatoren stellen eine platzsparende Methode für eine solche Datenverarbeitung dar, da zu einem bestimmten Zeitpunkt nur Teile der Datei verarbeitet werden. Wir können für diese Zwecke auch Iteratoren verwenden, aber Generator bietet eine schnelle Möglichkeit (wir müssen hier nicht die Methoden __next__ und __iter__ schreiben).