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 sont définis à l'aide du mot clé yield
, qui met en pause l'exécution de la fonction et renvoie une valeur.
Syntaxe de base des générateurs
def simple_generator():
yield 1
yield 2
yield 3
## Creating a generator object
gen = simple_generator()
## Iterating through generator values
for value in gen:
print(value)
Caractéristiques clés des générateurs
Caractéristique |
Description |
Efficacité mémoire |
Génère les valeurs à la volée, réduisant ainsi la consommation mémoire |
Évaluation paresseuse |
Les valeurs ne sont produites que lorsqu'elles sont demandées |
Itération |
Peut être itéré à l'aide de boucles for ou de la fonction next() |
Expression de générateur
Les générateurs peuvent également être créés à l'aide d'expressions de générateur, qui sont similaires aux compréhensions de liste :
## Generator expression
squared_gen = (x**2 for x in range(5))
## Converting to list
squared_list = list(squared_gen)
print(squared_list) ## [0, 1, 4, 9, 16]
Flux de travail des générateurs
graph TD
A[Generator Function Called] --> B[Execution Starts]
B --> C{First yield Statement}
C --> |Pauses Execution| D[Returns Value]
D --> E[Waiting for next() or iteration]
E --> F{Next yield Statement}
F --> |Resumes Execution| G[Returns Next Value]
G --> H[Continues Until StopIteration]
Exemple pratique
def fibonacci_generator(n):
a, b = 0, 1
count = 0
while count < n:
yield a
a, b = b, a + b
count += 1
## Using the Fibonacci generator
for num in fibonacci_generator(6):
print(num)
Quand utiliser les générateurs
- Traitement de grands ensembles de données
- Création de séquences infinies
- Implémentation d'itérateurs personnalisés
- Réduction de la charge mémoire
En comprenant les générateurs, vous pouvez écrire un code Python plus économique en mémoire et plus élégant. LabEx recommande de pratiquer avec différents scénarios de générateurs pour maîtriser cette fonctionnalité puissante.