Humour Tech ~1 min de lecture
Réutiliser les valeurs d’un générateur Python
— Le total donne 30 au premier calcul, puis 0 au second. — Le générateur a déjà tout donné. Littéralement.

Un premier sum(g) renvoie 30, le second 0 : le générateur a déjà tout donné, littéralement. En Python, un générateur produit ses valeurs à la demande, sans stocker toute la séquence, mais ne recommence pas au début après un parcours.
Avec g = (n for n in [10, 20]), le premier sum(g) consomme les deux valeurs et renvoie 30. Le générateur est alors épuisé. Un second sum(g) renvoie 0, car il ne reste aucune valeur à additionner.
Si plusieurs calculs doivent parcourir les mêmes valeurs et que leur volume tient en mémoire, utilisez valeurs = list(g) avant de consommer le générateur. Chaque appel à sum(valeurs) renverra alors 30. La conversion doit avoir lieu avant le premier calcul, pas après.
Pour parcourir deux fois les valeurs d’un générateur, convertissez-le en liste avant de le consommer.