Si vous rencontrez un objet générateur qui a généré plusieurs valeurs, vous pouvez chercher à le rajeunir pour le réutiliser. Cette quête découle du désir d'éviter la préparation fastidieuse associée à la création d'un générateur.
Malheureusement, contrairement aux ouroboros, un générateur ne peut pas se régénérer. Cependant, plusieurs stratégies offrent du répit :
Tel un phénix, vous pouvez ressusciter le générateur en invoquant à nouveau sa fonction parent :
<code class="python">y = FunctionWithYield() for x in y: print(x) y = FunctionWithYield() for x in y: print(x)</code>
Cette approche garantit de nouveaux calculs, mais se fait au prix de la répétition d'étapes de préparation coûteuses.
En adoptant la préservation, vous pouvez stocker les résultats du générateur dans une structure de données qui permet plusieurs itérations. :
<code class="python">y = list(FunctionWithYield()) for x in y: print(x) # Can iterate again: for x in y: print(x)</code>
Bien que cette méthode protège contre les calculs répétitifs, elle entraîne une surcharge de stockage.
Le choix entre ces options présente le compromis classique entre la mémoire et le traitement. L'option 1 sacrifie le temps de traitement tandis que l'option 2 surcharge la mémoire.
Bien que tee, comme suggéré par d'autres, offre des fonctionnalités qui ressemblent à la mise en mémoire tampon, il entraîne toujours la même surcharge de stockage et les mêmes caractéristiques de performances. comme option 2.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!