Generator

10 min Niveau 4

Générateurs en Python

Les générateurs en Python sont un type d'itérable, comme les listes ou les tuples. Cependant, contrairement aux listes, les générateurs ne stockent pas leurs contenus en mémoire. Ils génèrent les éléments à la volée.

Création de Générateurs

Utilisation de Fonctions et yield

  • Définition : Un générateur est créé avec une fonction qui utilise l'instruction yield.
  • Syntaxe :
def mon_generateur():
    yield valeur

Exemple :

def compte_jusqu_a_trois():
    yield 1
    yield 2 
    yield 3

Générateurs avec Expressions

Syntaxe : (expression for item in iterable) Exemple :

carres = (x**2 for x in range(10))

Utilisation des Générateurs

Itération : Utilisez une boucle for pour itérer sur les valeurs générées. Fonctions Intégrées : next() pour obtenir la prochaine valeur, iter() pour convertir en itérateur.

gen = compte_jusqu_a_trois()
next(gen)  # Renvoie 1
next(gen)  # Renvoie 2

Avantages des Générateurs

Économie de Mémoire : Ils consomment moins de mémoire car ils génèrent des éléments à la demande. Génération à la Volée : Utile pour générer de grandes séquences de données sans épuiser la mémoire. Utilisation dans des Boucles : Parfait pour traiter chaque élément d'une séquence au fur et à mesure qu'ils sont générés.

Exemples de Générateurs

Générateur Simple

def mon_generateur():
  n = 1
  print("C'est parti!")
  yield n

  n += 1
  print("C'est le numéro deux!")
  yield n

  n += 1
  print("Et finalement trois!")
  yield n

Utilisation de Générateurs dans des Boucles

for nombre in mon_generateur():
  print(nombre)

Bonnes Pratiques

Utilisation Judicieuse : Employez des générateurs pour les grandes données ou pour des opérations qui ne nécessitent pas la conservation de tous les éléments en mémoire.

Gestion de l'État : Soyez conscient que l'état interne d'un générateur ne peut pas être réinitialisé; une fois consommé, il ne peut pas être réutilisé.

logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus