Definition: Ein Generator ist wie eine normale Funktion, die einen Wertebereich mit Hilfe der Ausbeute Stichwort. Es gibt jeweils ein Objekt zurück. Es verwendet intern einen Iterator. Um auf das nächste Element zuzugreifen Nächster() Funktion verwendet wird, oder wir können sie verwenden zum eine Schleife. Wenn wir versuchen, auf den Wert außerhalb des Bereichs zuzugreifen, wird a StopIteration Error.
Wir werden ein Beispiel sehen, um es besser zu verstehen
Ex: Generatorfunktion für Wertebereich
def range_fun(n):x = 0
während x < n:
Ertrag x
x += 1
y = range_fun (3)
#Aufruf mit for-Schleife
print('Werte mit der Methode next() generieren')
für i in range_fun(3):
drucken(i)
#Aufrufgenerator mit nächster Methode
print('Werte mit der for-Schleifenmethode generieren')
drucken (nächstes (y))
drucken (nächstes (y))
drucken (nächstes (y))
print(next(y))#Stop Iteration-Ausnahme wird ausgelöst
Ex: Generatorfunktion für Fibonacci-Reihen
def fib_fun(n):x, y = 0, 1
während x < n:
Ertrag x
x, y = y, x + y
z = fib_fun(6) #generatorobjekt
print('Werte mit der Methode next() generieren')
drucken (nächstes (z))
drucken (nächstes (z))
drucken (nächstes (z))
drucken (nächstes (z))
drucken (nächstes (z))
drucken (nächstes (z))
print('Werte mit der for-Schleifenmethode generieren')
für i in fib_fun(6):
drucken(i)
Ex: Generatorfunktion zum Erzeugen von Wertebereichen bei gegebenen Start- und Endwerten.
def my_range(start, end):Strom = Start
während aktuell < end:
Ertragsstrom
Strom +=1
print('Werte mit der Methode next() generieren')
nums = my_range(1,5)
print(nächste(Zahlen))
print(nächste(Zahlen))
print(nächste(Zahlen))
print(nächste(Zahlen))
print('Werte mit der for-Schleifenmethode generieren')
für num in my_range(1,5):
Drucken (Anzahl)
Ex: Generator, um jede Zahl (weniger als eine Zahl) mit einer Zahl zu multiplizieren
def gen_mulby_num(max,num):n = 0
während nein < max:
Ertrag n * num
n += 1
für i in gen_mulby_num(5,3):
drucken(i)
Ex: Generator, um Würfel für Wertebereich zu finden
def gen_mulby_num(max,num):n = 0
während nein < max:
Ertrag n * num
n += 1
für i in gen_mulby_num(5,3):
drucken(i)
Ex: mehrere Generatoren: Finde das Quadrat der geraden Zahlen, die aus einer Zahl erzeugt werden
Generator 1: Generiere gerade Werte aus einer gegebenen Zahl
Generator 2: Generiere Quadratzahlen aus den Werten von Generator1
def gen_even(m):n = 0
während nein < m:
wenn n % 2 == 0:
Ertrag n
n += 2
def gen_square (Zahlen):
für num in num:
Ertrag 2 * num
für n in gen_square(gen_even(15)):
drucken(n)
Ex: Mehrere Generatoren: Erstellen Sie eine Fibnacci-Reihe und fügen Sie jeder Zahl einen Wert von 10 hinzu.
Generator1: erzeugt Fibonacci-Reihen aus einer gegebenen Zahl
Generator2: Addiere jede Zahl um 10 von Generator1
def gen_fib(n):x, y = 0, 1
während x < n:
Ertrag x
x, y = y, x + y
def gen_add_10(Zahlen):
für num in num:
Ertrag 10 + num
für n in gen_add_10(gen_fib(5)):
drucken(n)
Generatorverständnis:
Generatorverständnisse ähneln Listenverständnissen, bei denen die Liste eckige Klammern verwendet; dies verwendet normale Klammern.
Ex:
nums = (i für i im Bereich (10))print(Typ(Zahlen))
print(Liste(Zahlen))
Unterschied zwischen Generator und normaler Funktion:
- Ein Generator liefert Werte mit Ausbeute Schlüsselwort, bei dem die normale Funktion den . verwendet Rückkehr Stichwort
- Generator startet dort, wo er beim nächsten Aufruf aufgehört hat. Die normale Funktion führt jedes Mal alle Anweisungen aus.
- Generator spart Speicher, da er jeweils einen Wert zurückgibt. Damit können wir unendliche Werte generieren generate.
Fazit:
Generator ist sehr hilfreich, wenn wir mit riesigen/großen Daten umgehen. Zu einem bestimmten Zeitpunkt enthält es nur ein einzelnes Datenelement und nicht ganze Daten. Das Generatorkonzept wird in Python als fortschrittliches Konzept angesehen.