[PYTHON] Generator

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

Generator
Generator
Generator Memo.
Natürlicher Zahlengenerator
Gemusterter Passwortgenerator
Probieren Sie den Generator von numpy.random aus
Hash Passwort Generator
[Python] Generatorfunktion
Generatorfunktion auch in JavaScript
Notator-Einschlussnotation Taple-Einschlussnotation
Hinweise zur Erstellung des Kennwortgenerators
NetworkX-Grafikgeneratorliste