PaliSkill
Python avancé

Leçon 10 / 10 — Chapitre 5: Itérateurs, générateurs et context managers

Cas pratique : un générateur de pagination et un context manager

Cette dernière leçon combine une fonction génératrice et un context manager avec @contextmanager, pour parcourir une longue liste par petits groupes tout en mesurant le temps total.

from contextlib import contextmanager
import time

@contextmanager
def chronometre(nom):
    debut = time.time()
    yield
    duree = time.time() - debut
    print(f"{nom} : {duree:.4f} secondes")

def par_pages(liste, taille_page):
    for debut in range(0, len(liste), taille_page):
        yield liste[debut:debut + taille_page]

produits = ["riz", "huile", "sucre", "farine", "sel", "lait", "the"]

with chronometre("Pagination"):
    for page in par_pages(produits, 3):
        print(page)

Ce que fait chaque partie :

  • chronometre, décoré avec @contextmanager (vu dans ce chapitre), mesure la durée totale du bloc with, en affichant nom pour identifier ce qui a été chronométré.
  • par_pages est une fonction génératrice (vue dans ce chapitre) : yield liste[debut:debut + taille_page] produit une tranche de la liste à la fois, sans jamais construire toutes les pages en mémoire d'un coup.
  • range(0, len(liste), taille_page) (le paramètre step, vu dans Python Débutant) avance de taille_page en taille_page à chaque tour.

Avec 7 produits et une taille de page de 3, ce code affiche trois pages : ['riz', 'huile', 'sucre'], ['farine', 'sel', 'lait'], puis ['the'] (la dernière page, incomplète), suivies du message de durée affiché par le context manager à la sortie du bloc.

À vous de jouer : utilisez par_pages avec une taille de page différente sur une liste de votre choix, et vérifiez que la dernière page contient bien le reste, même incomplet.

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 87 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès