Comment utiliser les générateurs en Python (déclaration de rendement)
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.
Aperçu
Lorsque vous travaillez avec des ensembles de données volumineux, des fichiers journaux ou des flux de données infinis, le chargement simultané de tous les éléments en mémoire (comme renvoyer une grande liste) peut facilement épuiser la RAM du système et faire planter votre application. Python propose une solution brillante et économe en mémoire : les générateurs.
Un générateur est un type spécial de fonction qui renvoie un itérateur paresseux. Au lieu de calculer toutes les valeurs en même temps et de les renvoyer, un générateur génère les valeurs une par une, comme demandé. La principale différence réside dans la déclaration « rendement ». Lorsqu'une fonction génératrice appelle « rendement », elle met en pause son état d'exécution (variables, pointeur d'instruction) et renvoie la valeur obtenue. Lorsque la valeur suivante est demandée, la fonction reprend exactement là où elle s'était arrêtée.
Étant donné que les calculs du générateur sont exécutés paresseusement, ils n’utilisent presque aucune mémoire, quelle que soit la taille de l’ensemble de données. Python prend également en charge les expressions de générateur, qui utilisent la syntaxe entre parenthèses « (x pour x dans les données) » pour créer des générateurs en ligne légers sans déclarer de fonctions complètes.
Sortie de code et d'exécution
Ce script montre la génération de séquences à l'aide de fonctions génératrices avec l'instruction rendement et les expressions génératrices.
# 1. Generator function using yield
def count_up_to(limit):
count = 1
while count <= limit:
yield count
count += 1
# Instantiating the generator
counter = count_up_to(3)
print("Memory safe generator instantiated.")
# Fetching values manually
print("Next 1:", next(counter))
print("Next 2:", next(counter))
print("Next 3:", next(counter))
# 2. Iterating with a for loop (automatically handles StopIteration)
print("\n--- Looping over generator ---")
for num in count_up_to(4):
print("Num:", num)
# 3. Generator expression (Shorthand syntax)
squares_gen = (x**2 for x in range(1, 4))
print("\nGenerator expression elements:")
print(list(squares_gen)) # Cast to list to print all elementsMemory safe generator instantiated.
Next 1: 1
Next 2: 2
Next 3: 3
--- Looping over generator ---
Num: 1
Num: 2
Num: 3
Num: 4
Generator expression elements:
[1, 4, 9]Mise en œuvre étape par étape
- Définissez une fonction à l'aide du mot-clé standard def.
- Utilisez le mot clé rendement au lieu de return pour renvoyer les valeurs au flux de l'itérateur.
- Parcourez le générateur à l'aide d'une boucle for ou appelez la fonction next(gen) intégrée pour extraire les valeurs.
- Utilisez des expressions génératrices (en utilisant des parenthèses) pour des conversions paresseuses simples et en ligne.
Foire aux questions
Quel est le principal avantage des générateurs par rapport aux listes ?
Efficacité de la mémoire. Les listes stockent tous les éléments simultanément dans la RAM, tandis que les générateurs génèrent les éléments un par un à la demande, vous permettant de traiter des ensembles de données plus volumineux que la mémoire totale de votre système.
Que se passe-t-il lorsqu'un générateur manque d'articles ?
Python déclenche une exception StopIteration. Une boucle for intercepte automatiquement cette exception pour quitter la boucle correctement, mais appeler manuellement next() sur un générateur épuisé lèvera l'exception.
Sujets connexes
Apprenez à utiliser les compréhensions de listes en Python. Écrivez des boucles concises, appliquez des filtres conditionnels et créez des matrices avec une syntaxe visuelle claire.
Comment utiliser les gestionnaires de contexte en PythonDécouvrez comment fonctionnent les gestionnaires de contexte en Python. Maîtrisez l'instruction with, gérez les ressources système et écrivez des gestionnaires de contexte personnalisés.
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Générateurs Python
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.
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.