Was sind Generatoren in Python und wie werden sie verwendet?



Erfahren Sie, was Generatoren in Python sind und welche Vorteile sie bieten. Erfahren Sie auch, wie Sie sie zusammen mit verschiedenen Anwendungsfällen erstellen und verwenden.

Das Generieren von Iterables oder Objekten, die das Überschreiten ermöglichen, wird als lästige Aufgabe angesehen. Aber in Die Umsetzung dieser schmerzhaften Aufgabe wird einfach reibungslos. Schauen wir uns also Generatoren in Python genauer an.

Hier ist eine Liste aller in diesem Artikel behandelten Themen:





Beginnen wir also. :) :)

Was sind Generatoren in Python?

Generatoren sind im Grunde Funktionen, die durchquerbare Objekte oder Gegenstände zurückgeben. Diese Funktionen produzieren nicht alle Elemente auf einmal, sondern sie einzeln und nur bei Bedarf. Wann immer die ist enthalten, um über eine Reihe von Elementen zu iterieren, wird eine Generatorfunktion ausgeführt. Generatoren haben auch eine Reihe von Vorteilen.



Vorteile der Verwendung von Generatoren

  • Ohne Generatoren in Python ist das Erstellen von Iterables äußerst schwierig und langwierig.

  • Generatoren sind einfach zu implementieren, da sie automatisch __iter __ (), __next __ () und StopIteration implementieren, die ansonsten explizit angegeben werden müssen.



  • Im Gegensatz zu normal wird Speicherplatz gespeichert, wenn die Artikel nach Bedarf hergestellt werden . Diese Tatsache wird sehr wichtig, wenn Sie eine große Anzahl von Iteratoren erstellen müssen. Dies wird auch als der größte Vorteil von Generatoren angesehen.

  • Kann verwendet werden, um eine unendliche Anzahl von Gegenständen zu produzieren.

  • Sie können auch verwendet werden, um eine Reihe von Operationen zu leiten

Normale Funktionen vs Generatorfunktionen:

Generatoren in Python werden genauso erstellt wie Sie Verwenden Sie das Schlüsselwort 'def'. Generatorfunktionen verwenden jedoch das Schlüsselwort yield anstelle von return. Dies wird durchgeführt, um den Interpreter darüber zu informieren, dass dies ein Iterator ist. Darüber hinaus werden Generatorfunktionen ausgeführt, wenn die next () - Funktion aufgerufen wird, und nicht wie bei normalen Funktionen nach ihrem Namen. Betrachten Sie das folgende Beispiel, um es besser zu verstehen:

BEISPIEL:

def func (a): Ausbeute a a = [1,2,3] b = func (a) next (b)

AUSGABE: [1, 2, 3]

Wie Sie sehen können, verwendet func () in der obigen Ausgabe das Schlüsselwort yield und die nächste Funktion für seine Ausführung. Für die normale Funktion benötigen Sie jedoch den folgenden Code:

BEISPIEL:

wie man einen Iterator benutzt
def func (a): return a a = [1,2,3] func (a)

AUSGABE: [1, 2, 3]

Wenn Sie sich das obige Beispiel ansehen, fragen Sie sich möglicherweise, warum Sie eine Generatorfunktion verwenden sollten, wenn die normale Funktion ebenfalls dieselbe Ausgabe zurückgibt. Fahren wir also fort und sehen, wie Generatoren in Python verwendet werden.

Generatorfunktionen verwenden:

Wie bereits erwähnt, erzeugen Generatoren in Python nacheinander iterable Dateien. Schauen Sie sich das folgende Beispiel an:

BEISPIEL:

def myfunc (a): während a> = 3: ergibt a a = a + 1 b = myfunc (a) print (b) next (b)

Wenn Sie die folgende Funktion ausführen, wird die folgende Ausgabe angezeigt:

AUSGABE: 4

Hier wurde ein iterierbares Objekt zurückgegeben, das die while-Bedingung erfüllt. Nach der Ausführung wird die Steuerung an den Anrufer übertragen. Falls mehr Elemente benötigt werden, muss dieselbe Funktion erneut ausgeführt werden, indem die Funktion next () aufgerufen wird.

weiter (b)

AUSGABE: 5

Bei weiteren Ausführungen gibt die Funktion 6,7 usw. zurück. Generatorfunktionen in Python implementieren die Methoden __iter __ () und __next __ () automatisch. Daher können Sie die Objekte mit der next () -Methode durchlaufen. Wenn die Elementgenerierung beendet werden soll, implementieren die Generatorfunktionen die StopIteration intern, ohne den Anrufer beunruhigen zu müssen. Hier ist ein weiteres Beispiel dafür:

BEISPIEL:

a = 2 def myfunc (a): während a> = 0: ergibt a a - = 1 b = myfunc (a) print (b) next (b)

AUSGABE:

StopIteration-Generatoren in Python-EdurekaDas obige Bild zeigt die erforderliche Ausführung unseres Programms. Wenn Sie erneut versuchen, die nächste Funktion aufzurufen, wird eine Meldung zurückgegeben StopIteration wurde implementiert. Wenn Sie dies mit normalen Funktionen versuchen, werden die zurückgegebenen Werte nicht geändert oder iteriert. Schauen Sie sich das folgende Beispiel an:

BEISPIEL:

def z (): n = 1 Ausbeute n n = n + 3 Ausbeute n p = z () next (p)

AUSGABE:

Generatoren mit Schleifen:

Wenn Sie dieselbe Funktion gleichzeitig ausführen möchten, können Sie die for-Schleife verwenden. Diese Schleife hilft beim Durchlaufen der Objekte und führt nach allen Implementierungen StopIteration aus.

BEISPIEL:

def z (): n = 1 Ausbeute n n = n + 3 Ausbeute n für x in z (): print (x)

AUSGABE:

ein
4

Sie können auch Ausdrücke angeben, um iterierbare Objekte zu generieren.

Generatorausdrücke:

Sie können auch Ausdrücke zusammen mit der for-Schleife verwenden, um Iteratoren zu erzeugen. Dies macht die iterierbaren Generierungen normalerweise sehr einfach. Der Generatorausdruck ähnelt dem Listenverständnis und dergleichen Lambda-Funktionen Generatorausdrücke erzeugen anonyme Generatorfunktionen.

Schauen Sie sich das folgende Beispiel an:

BEISPIEL:

a = Bereich (6) print ('Listenverständnis', end = ':') b = [x + 2 für x in a] print (b) print ('Generatorausdruck', end = ': n') c = (x + 2 für x in a) drucke (c) für y in c: drucke (y)

AUSGABE:

Listenverständnis: [2, 3, 4, 5, 6, 7]

Generatorausdruck:

2
3
4
5
6

Wie Sie sehen können, ist in der obigen Ausgabe der erste Ausdruck ein Listenverständnis, das in [] Klammern angegeben ist. Das Listenverständnis erzeugt die vollständige Liste der Elemente auf einmal. Der nächste ist ein Generatorausdruck, der die gleichen Elemente nacheinander zurückgibt. Es wird in Klammern () angegeben.


GeneratorFunktionen können auch in anderen Funktionen verwendet werden.Beispielsweise:

BEISPIEL:

a = Bereich (6) drucken ('Generatorausdruck', Ende = ': n') c = (x + 2 für x in a) drucken (c) drucken (min (c))

AUSGABE:

Generatorausdruck
2

Das obige Programm druckt den Min-Wert, wenn der obige Ausdruck auf die Werte von a angewendet wird.

Anwendungsfälle:

Lassen Sie uns Generatoren in verwenden zu:

Array von Objekten im Java-Beispielprogramm
  • Generieren Sie die Fibonacci-Serie
  • Zahlen generieren

Generieren von Fibonacci-Serien:

Wie wir alle wissen, handelt es sich bei der Fibonacci-Reihe um eine Reihe von Zahlen, wobei jede Zahl eine Summe der beiden vorhergehenden Zahlen ist. Die ersten beiden Zahlen sind 0 und 1. Hier ist ein Generatorprogramm zum Generieren von Fibonacci-Reihen:

BEISPIEL:

def fibo (): first, second = 0,1, während True: first first, second = second, first + second für x in fibo () ergibt: wenn x> 50: break print (x, end = '')

AUSGABE:

0 1 1 2 3 5 8 13 21 34

Die obige Ausgabe zeigt die Fibonacci-Reihe mit Werten unter 50. Schauen wir uns nun an, wie eine Liste von Zahlen erstellt wird.

Zahlen generieren:

Wenn Sie bestimmte Listennummern generieren möchten, können Sie dies mithilfe von Generatorfunktionen tun. Schauen Sie sich das folgende Beispiel an:

BEISPIEL:

a = Bereich (10) b = (x für x in a) Druck (b) für y in b: Druck (y)

AUSGABE:

0
ein
2
3
4
5
6
7
8
9

BEISPIEL:

a = Bereich (2,10,2) b = (x für x in a) Druck (b) für y in b: Druck (y)

AUSGABE:


2
4
6
8

Das obige Programm hat gerade Zahlen von 2 bis 10 zurückgegeben. Dies bringt uns zum Ende dieses Artikels über Generatoren in Python. Ich hoffe, Sie haben alle Themen verstanden.

Stellen Sie sicher, dass Sie so viel wie möglich üben und Ihre Erfahrung zurücksetzen.

Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich dieses Blogs „Generators in Python“. Wir werden uns so schnell wie möglich bei Ihnen melden.

Um detaillierte Informationen zu Python und seinen verschiedenen Anwendungen zu erhalten, können Sie sich live anmelden mit 24/7 Support und lebenslangem Zugriff.