dans une boucle for
l = ['Bonjour', 'Bonjour', 'Bonsoir']
for i in l:
print(i)
Résultat de l'exécution en boucle for
Bonjour
Bonjour
Bonsoir
Si vous écrivez ceci en utilisant un générateur,
Générateur 1
def greeting():
yield 'Bonjour'
yield 'Bonjour'
yield 'Bonsoir'
g = greeting()
print(next(g))
print(next(g))
print(next(g))
Résultat d'exécution du générateur 1
Bonjour
Bonjour
Bonsoir
Si vous avez deux générateurs,
2 générateurs
def greeting():
yield 'Bonjour'
yield 'Bonjour'
yield 'Bonsoir'
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))
Résultat d'exécution de deux générateurs
Bonjour
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Bonjour
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Gaga Gaga!!!
Bonsoir
Au lieu de traiter à la fois comme une boucle for Garder la génération d'éléments Un autre traitement peut être effectué.
Alors Par exemple, comme le code ci-dessous Si le traitement lourd est au milieu Plutôt que de faire tout le traitement en même temps Il peut être subdivisé et mis en œuvre.
Générateur lourd
def greeting():
yield 'Bonjour'
for i in range(1000000):
print(i)
yield 'Bonjour'
for i in range(1000000):
print(i)
yield 'Bonsoir'
Rendement du processus «bonjour». for i in range(1000000): Vous n'êtes pas obligé de traiter l'impression (i).
prochain for i in range(1000000): print(i) Traitement du rendement «Bonjour».
Il peut être traité en petits morceaux.
Erreur du générateur
def greeting():
yield 'Bonjour'
yield 'Bonjour'
yield 'Bonsoir'
g = greeting()
for i in range(4):
print(next(g))
Erreur d'exécution du générateur
Traceback (most recent call last):
File "Main.py", line 9, in <module>
print(next(g))
StopIteration
Bonjour, bonjour, trois tels pour le Bonsoir, J'ai fait 4 tirages (suivant (g)), donc StopIteration renvoie une erreur.
Recommended Posts