Les générateurs peuvent pas être réutilisé. Vous disposez des options suivantes:
-
Exécuter la fonction de générateur de nouveau, le redémarrage de la production:
y = FunctionWithYield()
for x in y: print(x)
y = FunctionWithYield()
for x in y: print(x)
-
Stocker le générateur de résultats dans une structure de données sur la mémoire ou le disque que vous pouvez parcourir à nouveau:
y = list(FunctionWithYield())
for x in y: print(x)
# can iterate again:
for x in y: print(x)
L'inconvénient de l'option 1 , c'est qu'il calcule les valeurs de nouveau. Si c'est CPU-intensive, en fin de calcul deux fois. D'autre part, l'inconvénient de l' 2 est le stockage. L'ensemble de la liste de valeurs seront stockées sur la mémoire. Si il y a trop de valeurs, qui peut être peu pratique.
Si vous avez le classique entre mémoire et de traitement de compromis. Je ne peux pas imaginer un moyen de rembobinage du générateur sans stocker les valeurs ou les calculer de nouveau.