Python a une commande appelée yield pour faciliter la création d'un générateur. Je n'ai pas vraiment compris le comportement, je vais donc laisser une note ci-dessous.
test.py
def yield_test():
list0to4 = [0, 1, 2, 3, 4]
for i in list0to4:
yield i
for j in yield_test()
print j
Si vous exécutez le code ci-dessus, la sortie sera la suivante.
0
1
2
3
4
Tous les éléments de [0, 1, 2, 3, 4] peuvent être lus dans l'ordre.
Considérons maintenant le cas de l'utilisation d'un autre générateur en combinaison.
test.py
def yield_test1():
list0to4 = [0, 1, 2, 3, 4]
for i in list0to4:
yield i
def yield_test2():
list0to2 = [0, 1, 2]
for i in list0to2:
yield i
iter0to2 = yield_test2()
for j in yield_test1()
print j + iter0to2.next()
Dans ce cas, la sortie sera la suivante.
0
2
4
yield_test2 a moins d'éléments que yield_test1, mais il n'y a pas d'erreurs particulières.
Le générateur lève une exception [StopIteration] lorsqu'il va lire le suivant sans l'élément suivant. Dans l'instruction for, etc., il semble que la boucle soit arrêtée en excluant cette [Stop Iteration]. Par conséquent, dans l'exemple ci-dessus, [StopIteration] est déclenché par iter0to2.next (). Même si l'élément reste du côté yield_test1 (), l'instruction for sera omise.
Lors de l'utilisation d'une combinaison de générateurs, lequel a provoqué la sortie de la boucle? Veuillez noter que cela peut être difficile à comprendre.
Recommended Posts