générateur de Python

Les itérateurs jouent un rôle important dans Python. Ils vous permettent de créer un objet sur lequel on peut itérer. C’est un bon moyen de stocker des données accessibles via une boucle for in.

Le problème avec les itérateurs est qu’il faut beaucoup de travail pour en créer un. Ils sont utiles, mais vous devez écrire beaucoup de code pour en faire fonctionner un. Les générateurs aident à résoudre ce problème.

Dans ce guide, nous allons parler de ce que sont les générateurs Python et pourquoi vous devriez les utiliser. Nous allons également implémenter un générateur en Python pour vous aider à comprendre comment ils fonctionnent.

Sans plus tarder, commençons !

Qu’est-ce qu’un générateur ?

Un générateur est un moyen simple de créer un itérateur en Python. C’est une fonction qui renvoie un objet sur lequel vous pouvez itérer.

Les générateurs sont souvent appelés sucre syntaxique. En effet, ils n’ajoutent pas nécessairement de nouvelles fonctionnalités à Python. Ils contribuent à rendre votre code plus efficace.

Comme les itérateurs, vous ne pouvez parcourir un générateur qu’une seule fois. En effet, les générateurs gardent une trace du nombre de fois qu’ils ont été itérés et ne peuvent pas être réinitialisés.

Regardons un itérateur Python :

81 % des participants ont déclaré qu’ils se sentaient plus confiants quant à leurs perspectives d’emploi dans le domaine technologique après avoir assisté à un bootcamp. Soyez associé à un bootcamp aujourd’hui.

Le diplômé moyen d’un bootcamp a passé moins de six mois en transition de carrière, du démarrage d’un bootcamp à la recherche de son premier emploi.

Ce code crée un itérateur appelé Biscuits. Lorsque vous passez des données à travers cet itérateur, elles seront transformées en un objet itérable. Cela signifie que vous pouvez parcourir les données à l’aide d’une boucle for in. Si vous regardez ce code et pensez qu’il est vraiment long, c’est parce qu’il l’est.

Les générateurs peuvent nous aider à raccourcir ce code. √âcrivons un générateur pour notre itérateur ci-dessus :

Notre code a été considérablement réduit en taille. Voyons comment cela fonctionne.

Un générateur est une fonction qui a un mot-clé yield au lieu d’une instruction return. Les instructions Yield renvoient une valeur à partir d’une fonction.

La différence entre une instruction yield et une instruction return est qu’une instruction return arrête l’exécution d’une fonction, tandis qu’une instruction yield interrompt la fonction et continue sur itération.

Essayons de parcourir notre simple fonction de générateur :

Notre code renvoie :

Raspberry

Raspberry

…

Ce code continue de se répéter jusqu’à ce que nous arrêtions notre programme. C’est parce que nous avons utilisé une boucle while qui s’exécute pour toujours. Ce n’est pas très utile dans la plupart des cas. √âcrivons un générateur qui s’arrête lorsqu’une action a été effectuée.

Comment écrire un générateur Python

Nous avons un liste des cookies que nous voulons imprimer sur la console. Cette liste ressemble à ceci :

["Framboise‚", "Choc-Chip‚", "Cinnamon‚", &ldquo ;Oat‚"]

Pour les imprimer sur la console, nous pourrions créer mangé un simple générateur. Ouvrez un nouveau fichier Python et collez le code suivant :

Notre générateur parcourt chaque cookie de la liste que nous spécifions et renvoie chaque cookie individuellement. Ce générateur ne fonctionne pas encore. Nous devons utiliser une boucle for pour l’itérer :

Nous avons défini un tableau appelé cookie_list qui stocke une liste de quatre cookies. Nous avons ensuite mis en place une boucle for qui utilise notre générateur pour parcourir les valeurs dans cookie_list.

Pour chaque itération dans notre boucle for, l’objet généré est imprimé à la console :

Raspberry

"Python.Engineering est entré dans ma vie quand j’en avais le plus besoin et m’a rapidement aidé à me joindre à un bootcamp. Deux mois après avoir obtenu mon diplôme, j’ai trouvé mon emploi de rêve qui correspond à mes valeurs et mes objectifs dans la vie !"

Venus, ingénieur logiciel chez Rockbot

Choc-Chip

Cannelle

Avoine

Nous l’avons fait ! Ce générateur renvoie des valeurs jusqu’à ce que chaque valeur de la variable cookie_list ait été itérée.

Les générateurs ont une gamme de cas d’utilisation. Disons que nous avons une liste de prix de commande que nous voulons totaliser. Nous pourrions le faire en utilisant le code suivant :

Ce générateur conservera un total cumulé de la valeur de toutes les commandes dans un liste. Une fois que chaque élément a été itéré, le générateur produira la valeur totale actuelle des commandes. √âcrivons une boucle for qui utilise notre générateur :

Notre code renvoie :

2,3

4,8

6,75

12,75

20,25

22.4

Notre générateur a calculé la valeur cumulée de toutes les commandes dans la variable order_list. Chaque itération sur la liste renvoie la nouvelle valeur cumulée.

Comment faire √âcrire une expression génératrice

Les générateurs sont déjà plus faciles à écrire qu’un itérateur. Notre quête d’écriture de code plus propre n’a pas besoin de s’arrêter, gr√¢ce aux expressions génératrices.

Expressions génératrices sont similaires aux compréhension de liste. Les expressions génératrices produisent un élément à la fois, comme un générateur. Ceci est différent d’une compréhension de liste qui produit une liste entière, tous en même temps.

√âcrivons un générateur pour notre exemple de cookies :

Nous avons défini une liste de cookies dans la variable cookie_list. Nous créons ensuite une expression génératrice. Cette expression utilise la syntaxe des compréhensions de liste mais avec une grande différence : les compréhensions de liste sont définies entre crochets, tandis que les générateurs sont définis entre parenthèses arrondies.

Créons une boucle for qui itère sur l’expression :

Notre code renvoie :

Framboise

Choc-Chip

Cannelle

Avoine

La réponse de ce générateur est la même que celle de notre premier exemple. Notre syntaxe est nettement plus claire.

Il est important de noter que lorsque vous parcourez un générateur qui a été déclaré à l’aide d’une expression de générateur, vous ne l’appelez pas en tant que fonction. Notre générateur de cookie_generator n’accepte aucune valeur d’entrée : il contient déjà le code dont il a besoin pour itérer sur la liste cookie_list.

Vous devriez n’utilisez la syntaxe des expressions du générateur que lorsque vous devez écrire un générateur qui exécute une fonction simple. L’impression d’une liste de valeurs est un bon exemple ; multiplier les valeurs d’une liste par un nombre spécifique est un autre bon exemple.

C’est parce que si la syntaxe de l’expression du générateur est claire, elle est principalement conçue pour les expressions sur une ligne. Si votre générateur utilise plus d’une ligne de code, écrivez-le en tant que fonction de générateur en utilisant la syntaxe dont nous avons parlé plus tôt dans cet article.

Pourquoi les générateurs sont-ils utilisés ?

La principale raison pour laquelle les générateurs sont utilisés est qu’ils sont plus concis que les itérateurs.

Les générateurs sont comme une fonction et n’avez pas besoin d’instructions __init__, __iter__ ou __next__ pour fonctionner. Ceci est différent d’un itérateur qui nécessite ces trois instructions. Ce comportement signifie que vous pouvez implémenter un générateur en beaucoup moins de lignes de code que si vous écriviez un iterator.

De plus, les générateurs utilisent efficacement la mémoire. Les générateurs ne produisent qu’un élément à la fois. Ils ne créent pas une séquence entière en mémoire avant de renvoyer un résultat. Cela rend générateurs très pratiques si vous avez besoin d’itérer sur une grande liste de données.

La façon dont cela fonctionne est que les itérateurs utilisent une méthode d’évaluation paresseuse.Ils ne génèrent que l’élément suivant d’un objet itérable ct lorsque cet élément est demandé.

Conclusion (et défi)

Les générateurs vous permettent de créer un itérateur plus Pythonic.

Les générateurs facilitent la t√¢che pour écrire des objets à l’aide du protocole itérateur sans avoir à écrire des instructions __init__, __iter__ ou __next__. Les générateurs sont définis comme des fonctions. Ils utilisent l’instruction yield pour arrêter un générateur et transmettre une valeur au programme principal avant de revenir à ses opérations normales.

Si vous recherchez un défi, voici quelques idées :

Pour en savoir plus, consultez notre tutoriel sur comment faire écrire et utiliser des itérateurs Python. Vous êtes maintenant prêt à commencer à travailler avec des générateurs en Python comme un expert !

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method