Principes de base des générateurs
Qu'est-ce qu'un générateur ?
Un générateur en Python est un type spécial de fonction qui renvoie un objet itérateur, vous permettant de générer une séquence de valeurs au fil du temps, plutôt que de les calculer toutes d'un coup et de les stocker en mémoire. Les générateurs offrent une manière économisant la mémoire de travailler avec de grands ensembles de données ou des séquences infinies.
Création de générateurs
Fonctions génératrices
Les générateurs sont créés en utilisant le mot-clé yield
au lieu de return
. Lorsqu'une fonction génératrice est appelée, elle renvoie un objet générateur sans réellement démarrer l'exécution de la fonction.
def simple_generator():
yield 1
yield 2
yield 3
## Create generator object
gen = simple_generator()
Expressions génératrices
Similaires aux compréhensions de liste, les expressions génératrices offrent un moyen concis de créer des générateurs :
## Generator expression
squared_gen = (x**2 for x in range(5))
Comportement des générateurs
Évaluation paresseuse
Les générateurs utilisent l'évaluation paresseuse, ce qui signifie que les valeurs sont générées à la volée :
graph LR
A[Generator Created] --> B[Value Generated Only When Requested]
B --> C[Next Value Generated on Next Iteration]
Mécanisme d'itération
Les générateurs peuvent être itérés à l'aide de next()
ou dans une boucle for
:
def countdown(n):
while n > 0:
yield n
n -= 1
## Iteration methods
for num in countdown(3):
print(num)
## Using next()
gen = countdown(3)
print(next(gen)) ## 3
print(next(gen)) ## 2
Caractéristiques clés
Caractéristique |
Description |
Économie mémoire |
Génère les valeurs une par une |
Itération |
Ne peut être itéré qu'une seule fois |
Conservation de l'état |
Se souvient de son état entre les appels |
Cas d'utilisation
- Travailler avec de grands ensembles de données
- Séquences infinies
- Traitement en pipeline
- Environnements à mémoire limitée
Techniques avancées de générateurs
Chaînage de générateurs
def generator1():
yield from range(3)
def generator2():
yield from range(3, 6)
## Combining generators
combined = list(generator1()) + list(generator2())
print(combined) ## [0, 1, 2, 3, 4, 5]
Les générateurs sont particulièrement utiles dans les environnements LabEx où l'optimisation des ressources est cruciale. Ils offrent une alternative légère aux approches traditionnelles basées sur les listes, en particulier lorsqu'il s'agit de traiter des transformations de données volumineuses ou complexes.