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 blocwith, en affichantnompour identifier ce qui a été chronométré.par_pagesest 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ètrestep, vu dans Python Débutant) avance detaille_pageentaille_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