Pratique Python, IA Engineering et bien plus avec des exercices interactifs et des tests automatiques.
Une fonction peut renvoyer une autre fonction. On appelle parfois ca une fabrique de fonctions (function factory). C'est comme un atelier qui produit des outils …
Une closure (fermeture en francais), c'est une fonction qui se souvient de l'environnement dans lequel elle a ete créée, meme apres que cet environnement a …
Les closures peuvent capturer n'importe quel type de donnee, pas seulement des nombres. On peut s'en servir pour créer des fonctions avec de la mémoire. …
Parfois, tu ne sais pas a l'avance quel module tu veux importer. Le nom du module peut venir d'un fichier de configuration ou d'un choix …
Les decorateurs sont tres utiles pour ajouter des vérifications sans modifier la fonction originale. Un cas courant : vérifier que les arguments passes sont du …
Les fonctions en Python sont des objets. Ca veut dire que tu peux leur ajouter des attributs, comme a n'importe quel objet. Par exemple, apres …
Quand tu utilises un decorateur, la fonction decoree perd son nom et sa docstring. Regarde : def mon_deco(func): def wrapper(*args, **kwargs): return func(*args, **kwargs) return …
La memoization est une technique d'optimisation qui consiste a stocker les résultats d'appels précédents pour eviter de recalculer. C'est comme prendre des notes : au …
Pour qu'un objet soit utilisable dans une boucle for, il doit respecter le protocole itérable. Ça veut dire qu'il doit avoir une méthode __iter__() qui …
La suite de Fibonacci est une séquence où chaque nombre est la somme des deux précédents : 0, 1, 1, 2, 3, 5, 8, 13, …
Tu as peut-être déjà écrit une fonction qui renvoie la liste des nombres premiers. Avec un générateur, on peut faire mieux : au lieu de …
Tu connais les compréhensions de listes : [x**2 for x in range(10)]. Elles créent une liste complète en mémoire. Si tu remplaces les crochets par …
Parfois, un générateur a besoin de produire les valeurs d'un autre itérable. Tu pourrais écrire une boucle for avec yield dedans : def mon_generateur(): for …
Un des grands avantages des générateurs, c'est qu'ils peuvent produire une séquence infinie. Comme les valeurs sont calculées à la demande, le générateur ne plante …
La vraie puissance de la programmation fonctionnelle, c'est quand tu combines filter() et map() ensemble. L'idee est simple : d'abord tu filtres les éléments qui …
reduce() est la troisieme grande fonction de la programmation fonctionnelle. Contrairement a filter() (qui selectionne) et map() (qui transforme), reduce() combine tous les éléments d'un …
Les Enum classiques ne supportent pas les comparaisons d'ordre (<, >, <=, >=). Si tu essaies Couleur.ROUGE < Couleur.BLEU, tu obtiens une erreur. Pour avoir …