Générateurs Python : itérateurs économes en mémoire
Apprenez à utiliser les générateurs Python et les instructions rendement pour traiter d'énormes ensembles de données avec une empreinte mémoire minimale. Expressions du générateur principal.
Aperçu
Lors de l’écriture de code traitant des milliers ou des millions d’enregistrements, la gestion de la mémoire devient critique. Si vous chargez un ensemble de données complet dans une liste, vous risquez de manquer de RAM et de faire planter le serveur. Les générateurs Python résolvent ce problème en fournissant un mécanisme permettant de diffuser des données à la demande. Au lieu de calculer et de stocker l'intégralité de l'ensemble de données en mémoire en même temps, un générateur produit un élément à la fois, le transmet à l'appelant et suspend son exécution jusqu'à ce que l'élément suivant soit demandé.
Les générateurs sont définis comme des fonctions normales, mais ils utilisent le mot-clé `yield` au lieu de `return`. Lorsqu'une fonction génératrice est appelée, elle renvoie un objet itérateur générateur sans exécuter les instructions internes de la fonction. Lorsque l'appelant appelle « next() » sur le générateur (ou boucle dessus), la fonction s'exécute jusqu'à ce qu'elle atteigne « yield ». À ce stade, le générateur renvoie la valeur, enregistre ses variables locales et suspend l'exécution. Lorsqu'il est rappelé, il reprend exactement là où il s'était arrêté.
Vous pouvez également créer des générateurs à l'aide d'expressions génératrices, qui utilisent une syntaxe identique aux compréhensions de liste mais entourées de parenthèses `(...)` au lieu de crochets `[...]`. Cela rend incroyablement facile le remplacement des compréhensions de liste par des itérateurs économes en mémoire. En évitant les allocations massives de mémoire, les générateurs sont indispensables pour travailler avec des journaux volumineux, diffuser des données à partir de bases de données ou effectuer des calculs sur des séquences mathématiques de longueur infinie.
Sortie de code et d'exécution
Un générateur personnalisé produisant des nombres de Fibonacci et une expression génératrice économe en mémoire.
def fibonacci_generator(limit):
"""Yields Fibonacci numbers up to the limit."""
a, b = 0, 1
count = 0
while count < limit:
yield a
a, b = b, a + b
count += 1
# Instantiate generator
fib = fibonacci_generator(5)
print("--- Using Generator Function ---")
for num in fib:
print(num)
# Generator expression (squares of numbers)
squares_gen = (x**2 for x in range(1, 1000000))
print("\n--- Using Generator Expression ---")
print(next(squares_gen))
print(next(squares_gen))
print(next(squares_gen))--- Using Generator Function ---
0
1
1
2
3
--- Using Generator Expression ---
1
4
9Mise en œuvre étape par étape
- Lecture ligne par ligne de fichiers trop volumineux pour la RAM
- Générer une séquence infinie d'identifiants ou de chiffres mathématiques
- Streaming des enregistrements de base de données par lots pour traiter les appels d'API
Foire aux questions
Quelle est la différence entre rendement et rendement ?
return termine complètement la fonction. rendement renvoie une valeur et met la fonction en pause, enregistrant son état afin qu'elle puisse reprendre à la demande.
Que se passe-t-il lorsqu'un générateur manque d'articles ?
Cela déclenche une exception StopIteration. Sous une boucle 'for', Python intercepte automatiquement cette exception pour terminer proprement la boucle.
Sujets connexes
Apprenez à utiliser les boucles Python pour parcourir les données. Maîtrisez les bonnes pratiques pour les boucles, while, break, continue et loop avec des exemples interactifs.
Compréhensions PythonÉcrivez du Python plus propre et plus rapide. Liste principale, dictionnaire et compréhensions d'ensembles avec des exemples pratiques, des conditions de filtrage et des boucles imbriquées.
Python ItertoolsApprenez le module itertools de Python. Maîtrisez les itérateurs infinis, les combinaisons, les permutations, le regroupement et le traitement des données économe en mémoire.
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Comment utiliser les générateurs en Python
Apprenez à écrire des générateurs en Python. Comprenez le mot-clé rendement, l'évaluation paresseuse, l'optimisation de la mémoire et comparez les générateurs avec les structures de liste.
Aide-mémoire sur les méthodes de chaîne Python
Un guide de référence complet pour la manipulation des chaînes Python. Maîtrisez le formatage, la recherche, le fractionnement, le remplacement et la vérification des propriétés des chaînes.
Python vs JavaScript : quel langage de programmation est le meilleur ?
Une comparaison complète entre Python et JavaScript. Explorez les différences de syntaxe, les performances, les cas d'utilisation (backend et frontend) et des exemples de codage.