Générateur
Un générateur est un type spécial d'itérateur qui est créé à l'aide d'une fonction. C'est un moyen simple de créer un itérateur à l'aide d'une fonction.
Une fonction génératrice est définie comme une fonction normale, mais au lieu d'utiliser le mot clé return
pour renvoyer une valeur, elle utilise le mot clé yield
. Lorsque la fonction génératrice est appelée, elle n'exécute pas immédiatement le corps de la fonction. Au lieu de cela, elle renvoie un objet générateur qui peut être utilisé pour exécuter le corps de la fonction sur demande.
La fonction génératrice peut avoir une instruction yield
à n'importe quel endroit de son corps. Lorsque la fonction génératrice est appelée, elle n'exécute pas immédiatement le corps de la fonction. Au lieu de cela, elle renvoie un objet générateur qui peut être utilisé pour exécuter le corps de la fonction sur demande.
Voici un exemple d'une fonction génératrice qui génère les carrés d'une liste de nombres :
def my_generator(data):
for x in data:
yield x**2
for x in my_generator([1, 2, 3, 4, 5]):
print(x)
Sortie :
1
4
9
16
25
Les générateurs sont utiles car ils nous permettent de générer des éléments sur demande, au lieu de générer tous les éléments d'entrée. C'est une approche peut être plus efficace, car elle nous permet d'éviter de générer et de stocker des éléments inutiles.
Les générateurs sont également utilisés pour implémenter l'évaluation paresseuse en Python. Cela signifie que les éléments d'un générateur ne sont générés que lorsqu'ils sont nécessaires, au lieu de générer tous les éléments d'entrée. C'est une approche peut être plus efficace, car elle nous permet d'éviter de générer et de stocker des éléments inutiles.
Voici quelques cas d'utilisation courants des générateurs en Python :
- Générer des éléments sur demande, au lieu de générer tous les éléments d'entrée.
- Implémenter l'évaluation paresseuse d'un grand ensemble de données.
- Implémenter une logique d'itération personnalisée dans une fonction.
- Les générateurs sont un outil puissant en Python et peuvent être utilisés pour écrire du code efficace et élégant.
Différences entre Itérateur et Générateur
La principale différence entre un itérateur et un générateur est la manière dont ils sont implémentés.
Un itérateur est un objet qui implémente deux méthodes : __iter__
et __next__
. La méthode __iter__
renvoie l'objet itérateur lui-même, et la méthode __next__
renvoie la valeur suivante de l'itérateur.
Un générateur est une fonction qui utilise le mot clé yield
pour renvoyer une valeur. Lorsque la fonction génératrice est appelée, elle n'exécute pas immédiatement le corps de la fonction. Au lieu de cela, elle renvoie un objet générateur qui peut être utilisé pour exécuter le corps de la fonction sur demande.
Voici un résumé des principales différences entre itérateurs et générateurs :
- Les itérateurs sont des objets qui implémentent les méthodes
__iter__
et __next__
. Ils sont créés à partir d'objets itérables, tels que des listes, des tuples ou des chaînes de caractères.
- Les générateurs sont des fonctions qui utilisent le mot clé
yield
pour renvoyer une valeur. Ils sont créés en appelant une fonction génératrice.
- Les itérateurs peuvent être implémentés à l'aide d'une classe, tandis que les générateurs sont implémentés à l'aide d'une fonction.
- Les itérateurs renvoient un élément à la fois, tandis que les générateurs renvoient un objet générateur qui peut être utilisé pour générer des éléments sur demande.
- Les itérateurs sont utilisés pour accéder aux éléments d'un objet itérable un à la fois, tandis que les générateurs sont utilisés pour générer des éléments sur demande.
Dans l'ensemble, à la fois les itérateurs et les générateurs sont des outils utiles pour itérer sur une séquence d'éléments en Python. Ils nous permettent d'accéder ou de générer les éléments d'une séquence un à la fois, ce qui peut être plus efficace que de générer tous les éléments d'entrée.