Vol. 4 — № 12
The Python Loop · KiosqueNewsstand
Blog  
Un atelier Python · Édition d'ApprentissageA Python Workshop · Learning Edition

La vue qui se consomme : map, zip, filter, et le générateur épuisé The view that consumes itself: map, zip, filter, and the exhausted generator

map(), zip(), filter() ne sont pas des listes déguisées : ce sont des vues paresseuses, des itérateurs au sens strict du №10, épuisés dès qu'on les a parcourus une fois. Réutiliser l'un d'eux ne lève aucune erreur — il rend juste « vide », en silence, comme s'il n'avait jamais rien contenu. Le seul antidote : list(), et son prix en mémoire. map(), zip(), filter() aren't disguised lists: they're lazy views, iterators in №10's strict sense, exhausted the moment you've walked them once. Reusing one raises no error — it just goes 'empty', silently, as if it never held anything. The one antidote: list(), and its price in memory.

AudienceAudience
Dev qui a déjà passé le même map() à deux fonctions et obtenu un résultat vide sans comprendre Dev who's passed the same map() to two functions and gotten an empty result without understanding why
Format
Self-paced
ChapitresChapters
5
Date
Juil 2026 Jul 2026
≈ 18 min ●●○○ Itérateursmap/zip/filterGénérateurs

Chapitre 1 en accès libre — la suite (ch. 2 à 5) est réservée. Chapter 1 free to read — the rest (ch. 2–5) is members-only.

01CadrageFraming3 min

map() ne transforme rien. Il promet de transformer, un élément à la fois.map() transforms nothing. It promises to transform, one element at a time.

Les numéros précédents ont montré la paresse à travers l'itérateur écrit à la main et le générateur avec yield. Ce dernier numéro du volume referme la boucle en montrant que map(), zip() et filter() — trois fonctions natives que tout le monde utilise depuis toujours — obéissent exactement au même protocole. map(str.upper, noms) ne convertit aucune chaîne : elle retourne un objet map, un itérateur qui n'a encore rien fait. La conversion n'a lieu qu'élément par élément, au fil du for — jamais avant, jamais toute d'un coup.The previous issues showed laziness through the hand-written iterator and the yield-based generator. This volume's closing issue rounds the loop by showing that map(), zip() and filter() — three built-in functions everyone has always used — obey exactly the same protocol. map(str.upper, noms) converts no string: it returns a map object, an iterator that has done nothing yet. The conversion only happens element by element, as the for loop runs — never before, never all at once.

map() est une vue, pas un résultatmap() is a view, not a result
noms = ["ana", "bo", "cyril"]

maj = map(str.upper, noms)     # AUCUN nom n'est encore mis en majuscules
print(type(maj))                # <class 'map'> — pas une liste
print(maj)                      # <map object at 0x...> — rien à afficher, c'est une vue

for m in maj:                   # SEULEMENT MAINTENANT str.upper() tourne, un par un
    print(m)                    # 'ANA', 'BO', 'CYRIL'
Le sous-réflexe du numéroThis issue's sub-reflex

Face à map(), zip() ou filter(), ne demande jamais « qu'est-ce qu'il contient ? » mais « combien de fois vais-je le parcourir ? » Une fois : laisse-le tel quel. Plus d'une fois : matérialise-le.Facing map(), zip() or filter(), never ask "what does it hold?" but "how many times will I walk it?" Once: leave it as is. More than once: materialize it.

Trois fonctions, un seul protocoleThree functions, one protocol

map, zip et filter ne sont pas des cas particuliers à retenir séparément : ce sont trois façades sur le même protocole itérateur du №10 — __iter__ qui retourne self, __next__ qui avance, StopIteration à la fin.map, zip and filter aren't special cases to memorize separately: they're three façades over №10's same iterator protocol — __iter__ returning self, __next__ advancing, StopIteration at the end.

🔒

La suite est réservée The rest is members-only

Le premier numéro est libre. Débloque tout The Python Loop — tous les volumes, à vie — pour 5 €, paiement unique. The first issue is free. Unlock all of The Python Loop — every volume, forever — for €5, one-time.

Retour au kiosqueBack to newsstand