Que sont les générateurs en Python et comment les utiliser?

Découvrez ce que sont les générateurs en Python et leurs avantages. Apprenez également à les créer et à les utiliser avec divers cas d'utilisation.

La génération d'itérables ou d'objets permettant de les enjamber est considérée comme une tâche fastidieuse. Mais en , la mise en œuvre de cette tâche douloureuse devient vraiment fluide. Alors allons-y et examinons de plus près les générateurs en Python.



Voici une liste de tous les sujets abordés dans cet article:



Alors commençons. :)

Que sont les générateurs en Python?

Les générateurs sont essentiellement des fonctions qui renvoient des objets ou des éléments traversables. Ces fonctions ne produisent pas tous les éléments à la fois, mais les produisent un à la fois et uniquement lorsque cela est nécessaire. Chaque fois que le est inclus pour itérer sur un ensemble d'éléments, une fonction de générateur est exécutée. Les générateurs présentent également un certain nombre d'avantages.



Avantages de l'utilisation de générateurs

  • Sans générateurs en Python, produire des itérables est extrêmement difficile et long.

  • Générateurs faciles à implémenter car ils implémentent automatiquement __iter __ (), __next __ () et StopIteration qui, sinon, doivent être explicitement spécifiés.



  • La mémoire est sauvegardée au fur et à mesure que les éléments sont produits au besoin, contrairement à la normale . Ce fait devient très important lorsque vous devez créer un grand nombre d'itérateurs. Ceci est également considéré comme le plus grand avantage des générateurs.

  • Peut être utilisé pour produire un nombre infini d'articles.

  • Ils peuvent également être utilisés pour canaliser un certain nombre d'opérations

Fonctions normales vs fonctions du générateur:

Les générateurs en Python sont créés comme vous créez en utilisant le mot-clé 'def'. Mais, les fonctions Generator utilisent le mot-clé yield au lieu de return. Ceci est fait pour informer l'interpréteur qu'il s'agit d'un itérateur. Non seulement cela, les fonctions Generator sont exécutées lorsque la fonction next () est appelée et non par leur nom comme dans le cas des fonctions normales. Prenons l'exemple suivant pour mieux le comprendre:

EXEMPLE:

def func (a): donne a a = [1,2,3] b = func (a) next (b)

PRODUCTION: [1, 2, 3]

Comme vous pouvez le voir, dans la sortie ci-dessus, func () utilise le mot-clé yield et la fonction suivante pour son exécution. Mais, pour un fonctionnement normal, vous aurez besoin du morceau de code suivant:

EXEMPLE:

def func (a): retourne a a = [1,2,3] func (a)

PRODUCTION: [1, 2, 3]

Si vous regardez l'exemple ci-dessus, vous vous demandez peut-être pourquoi utiliser une fonction Generator alors que la fonction normale renvoie également la même sortie. Alors passons à autre chose et voyons comment utiliser les générateurs en Python.

Utilisation des fonctions du générateur:

Comme mentionné précédemment, les générateurs en Python produisent des itérables un à la fois. Jetez un œil à l'exemple suivant:

EXEMPLE:

def myfunc (a): while a> = 3: yield a a = a + 1 b = myfunc (a) print (b) next (b)

Lorsque vous exécutez la fonction suivante, vous verrez la sortie suivante:

PRODUCTION: 4

Ici, un objet itérable a été renvoyé satisfaisant la condition while. Après exécution, le contrôle est transféré à l'appelant. Dans le cas où plus d'éléments sont nécessaires, la même fonction doit être exécutée à nouveau en appelant la fonction next ().

suivant (b)

PRODUCTION: 5

Lors des exécutions ultérieures, la fonction retournera 6,7, etc. Les fonctions de générateur en Python implémentent automatiquement les méthodes __iter __ () et __next __ (). Par conséquent, vous pouvez parcourir les objets en utilisant simplement la méthode next (). Lorsque la génération d'élément doit se terminer, les fonctions Generator implémentent le StopIteration en interne sans avoir à inquiéter l'appelant. En voici un autre exemple:

EXEMPLE:

série c ++ fibonacci
a = 2 def myfunc (a): while a> = 0: yield a a - = 1 b = myfunc (a) print (b) next (b)

PRODUCTION:

StopIteration-Generators en Python-EdurekaL'image ci-dessus montre l'exécution de notre programme le nombre de fois requis. Si vous essayez d'appeler à nouveau la fonction suivante, elle renvoie un message décrivant StopIteration a été mis en place. Si vous essayez de faire cela avec des fonctions normales, les valeurs renvoyées ne changeront pas et ne seront pas répétées. Jetez un œil à l'exemple ci-dessous:

EXEMPLE:

def z (): n = 1 rendement n n = n + 3 rendement n p = z () suivant (p)

PRODUCTION:

Générateurs avec boucles:

Si vous souhaitez exécuter la même fonction à la fois, vous pouvez utiliser la boucle «for». Cette boucle aide à parcourir les objets et après toutes les implémentations, elle exécute StopIteration.

EXEMPLE:

def z (): n = 1 rendement n n = n + 3 rendement n pour x dans z (): print (x)

PRODUCTION:

un
4

Vous pouvez également spécifier des expressions pour générer des objets itérables.

Expressions du générateur:

Vous pouvez également utiliser des expressions avec la boucle for pour produire des itérateurs. Cela rend généralement les itérations de génération beaucoup plus faciles. L'expression du générateur ressemble à des compréhensions de liste et similaires fonctions lambda , les expressions génératrices créent des fonctions génératrices anonymes.

liste des événements javascript avec exemples

Jetez un œil à l'exemple ci-dessous:

EXEMPLE:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 pour x dans a) print (c) pour y dans c: print (y)

PRODUCTION:

Compréhension de liste: [2, 3, 4, 5, 6, 7]

Expression du générateur:

2
3
4
5
6

Comme vous pouvez le voir, dans la sortie ci-dessus, la première expression est une compréhension de liste qui est spécifiée entre [] crochets. La compréhension de liste produit la liste complète des éléments à la fois. La suivante est une expression de générateur qui renvoie les mêmes éléments mais un à la fois. Il est spécifié à l'aide de crochets ().


GénérateurLes fonctions peuvent également être utilisées dans d'autres fonctions.Par exemple:

EXEMPLE:

a = range (6) print ('Expression du générateur', end = ': n') c = (x + 2 pour x dans a) print (c) print (min (c))

PRODUCTION:

Expression du générateur
2

Le programme ci-dessus imprime la valeur min lorsque l'expression ci-dessus est appliquée aux valeurs de a.

Cas d'utilisation:

Utilisons des générateurs dans à:

  • Générer la série Fibonacci
  • Générer des nombres

Génération de la série Fibonacci:

La série de Fibonacci, comme nous le savons tous, est une série de nombres dans laquelle chaque nombre est une somme de deux nombres précédents. Les deux premiers nombres sont 0 et 1. Voici un programme générateur pour générer des séries de Fibonacci:

EXEMPLE:

def fibo (): first, second = 0,1 while True: yield first first, second = second, first + second for x in fibo (): if x> 50: break print (x, end = '')

PRODUCTION:

0 1 1 2 3 5 8 13 21 34

La sortie ci-dessus montre la série de Fibonacci avec des valeurs inférieures à 50. Voyons maintenant comment générer une liste de nombres.

Générer des nombres:

Si vous souhaitez générer des numéros de liste spécifiés, vous pouvez le faire à l'aide des fonctions de générateur. Jetez un œil à l'exemple suivant:

EXEMPLE:

a = range (10) b = (x pour x dans a) print (b) pour y dans b: print (y)

PRODUCTION:

0
un
2
3
4
5
6
sept
8
9

EXEMPLE:

a = range (2,10,2) b = (x pour x dans a) print (b) pour y dans b: print (y)

PRODUCTION:


2
4
6
8

Le programme ci-dessus a renvoyé des nombres pairs de 2 à 10. Cela nous amène à la fin de cet article sur les générateurs en Python. J'espère que vous avez compris tous les sujets.

Assurez-vous de pratiquer autant que possible et inversez votre expérience.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog «Générateurs en Python» et nous vous répondrons dans les plus brefs délais.

Pour obtenir des connaissances approfondies sur Python ainsi que sur ses différentes applications, vous pouvez vous inscrire en direct avec une assistance 24/7 et un accès à vie.