0Pricing
Python Academy · Leçon

Expressions génératrices

Écrire des pipelines différés et compacts

Expressions génératrices est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.

D'une compréhension de liste à une expression génératrice

Une expression génératrice ressemble à une compréhension de liste, mais utilise des parenthèses au lieu de crochets. Elle produit les valeurs de manière différée au lieu de créer toute la liste.

list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))

Différence de mémoire

Une compréhension de liste alloue chaque élément dès le départ. Une expression génératrice ne conserve presque rien tant que vous ne demandez pas de valeurs. Comparez leurs tailles.

import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))

Parcourir une expression génératrice

Vous consommez une expression génératrice comme n'importe quel itérateur : avec une boucle for, avec next() ou en la transmettant à une fonction.

gen = (c.upper() for c in 'hello')
for ch in gen:
    print(ch)

Filtrer avec if

Ajoutez une clause if pour ne conserver que les éléments correspondants, exactement comme dans une compréhension.

evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))

Transmettre directement aux fonctions

Lorsqu'une expression génératrice est le seul argument d'une fonction, vous pouvez supprimer les parenthèses supplémentaires. Cette écriture est claire et évite de créer une liste temporaire.

total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)

Rappel : une seule utilisation

Une expression génératrice est épuisée après un seul parcours, tout comme une fonction génératrice. Le deuxième parcours ne fournit rien.

gen = (x for x in range(3))
print(list(gen))
print(list(gen))

Enchaîner des expressions

Vous pouvez transmettre une expression génératrice à une autre pour créer un pipeline paresseux. Rien n'est calculé tant que le consommateur final ne demande pas de valeurs.

nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))

any() et all()

Les expressions génératrices sont particulièrement utiles avec any() et all(), car ces fonctions peuvent s'arrêter dès que la réponse est connue.

words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))

Boucles imbriquées

Comme les compréhensions, les expressions génératrices prennent en charge plusieurs clauses for, qui se lisent de gauche à droite.

pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))

Exemple de pipeline paresseux

Voici un petit pipeline de traitement de texte. Chaque étape est paresseuse : un fichier volumineux pourrait donc être parcouru en flux sans être chargé entièrement.

lines = ['  alpha ', '', '  beta', 'gamma  ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))

Quand choisir l'une ou l'autre

Utilisez une compréhension de liste lorsque vous devez réutiliser les données plusieurs fois ou accéder aux éléments par index. Utilisez une expression génératrice pour un parcours en flux en une seule passe ou pour de grandes quantités de données.

data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)

Vérification rapide

Testez votre compréhension des expressions génératrices.

Récapitulatif

Vous avez appris les expressions génératrices :

  • Utilisez des parenthèses comme alternative paresseuse aux compréhensions de liste.
  • Elles économisent la mémoire et prennent en charge les filtres if ainsi que les boucles imbriquées.
  • Elles s'associent bien à sum, any, all et à l'enchaînement.
  • Elles ne s'utilisent qu'une seule fois.

Ensuite : composer des générateurs avec yield from.

Questions Fréquemment Posées

La leçon « Expressions génératrices » est-elle gratuite ?

Oui — le texte complet de « Expressions génératrices » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Expressions génératrices » ?

Écrire des pipelines différés et compacts Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Python Academy ?

Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Expressions génératrices » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?

Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le protocole des itérateurs
  2. Fonctions génératrices
  3. Expressions génératrices
  4. yield from et délégation
← Retour à Python Academy