in einer for-Schleife
l = ['Guten Morgen', 'Hallo', 'Guten Abend']
for i in l:
print(i)
Ausführungsergebnis in for-Schleife
Guten Morgen
Hallo
Guten Abend
Wenn Sie dies mit einem Generator schreiben,
Generator 1
def greeting():
yield 'Guten Morgen'
yield 'Hallo'
yield 'Guten Abend'
g = greeting()
print(next(g))
print(next(g))
print(next(g))
Ausführungsergebnis von Generator 1
Guten Morgen
Hallo
Guten Abend
Wenn Sie zwei Generatoren haben,
2 Generatoren
def greeting():
yield 'Guten Morgen'
yield 'Hallo'
yield 'Guten Abend'
g = greeting()
def counter(num=10):
for i in range(num):
yield 'Gaga Gaga!!!'
c = counter()
print(next(g))
print(next(c))
print(next(c))
print(next(c))
print(next(c))
print(next(c))
print(next(g))
print(next(c))
print(next(c))
print(next(c))
print(next(c))
print(next(c))
print(next(g))
Ausführungsergebnis von zwei Generatoren
Guten Morgen
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Hallo
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Guten Abend
Anstatt sofort wie eine for-Schleife zu verarbeiten Beibehaltung der Elementgenerierung Andere Verarbeitung kann durchgeführt werden.
Damit Zum Beispiel wie der folgende Code Wenn schwere Verarbeitung in der Mitte ist Anstatt die gesamte Verarbeitung auf einmal durchzuführen Es kann unterteilt und implementiert werden.
Generator schwer
def greeting():
yield 'Guten Morgen'
for i in range(1000000):
print(i)
yield 'Hallo'
for i in range(1000000):
print(i)
yield 'Guten Abend'
Prozessausbeute "Guten Morgen". for i in range(1000000): Sie müssen den Druck (i) nicht verarbeiten.
Nächster for i in range(1000000): print(i) Verarbeitung der Ausbeute 'Hallo'.
Es kann in kleinen Stücken verarbeitet werden.
Generatorfehler
def greeting():
yield 'Guten Morgen'
yield 'Hallo'
yield 'Guten Abend'
g = greeting()
for i in range(4):
print(next(g))
Generatorfehler Laufzeitfehler
Traceback (most recent call last):
File "Main.py", line 9, in <module>
print(next(g))
StopIteration
Guten Morgen, hallo, drei davon zum Guten Abend, Ich habe 4 Drucke gemacht (weiter (g)), also StopIteration gibt einen Fehler zurück.
Recommended Posts