0% ont trouvé ce document utile (0 vote)
0 vues30 pages

Programmation Fonctionnelle Python

Ce document présente un module sur la programmation fonctionnelle en Python, abordant des concepts tels que les fonctions de première classe, la récursion, l'immutabilité, et les opérations fonctionnelles. Il décrit également les avantages de la programmation fonctionnelle, les outils disponibles en Python pour l'implémenter, ainsi que des cas d'usage pratiques. Enfin, le document conclut sur des notions avancées comme la curryfication et les monades.

Transféré par

nyamweogophilipp
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues30 pages

Programmation Fonctionnelle Python

Ce document présente un module sur la programmation fonctionnelle en Python, abordant des concepts tels que les fonctions de première classe, la récursion, l'immutabilité, et les opérations fonctionnelles. Il décrit également les avantages de la programmation fonctionnelle, les outils disponibles en Python pour l'implémenter, ainsi que des cas d'usage pratiques. Enfin, le document conclut sur des notions avancées comme la curryfication et les monades.

Transféré par

nyamweogophilipp
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation Fonctionnelle : Python

Concepts et applications pratiques

Klazé Faı̈rousse DAO

20 mai 2026

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 1 / 30


Plan du module

1 Introduction à la programmation fonctionnelle

2 Fonctions de première classe et d’ordre supérieur

3 Récursion et immutabilité

4 Opérations fonctionnelles en Python

5 Composition et curryfication

6 Programmation fonctionnelle avancée

7 Cas d’usage pratiques

8 Conclusion

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 2 / 30


Qu’est-ce que la programmation fonctionnelle ?

Paradigme de programmation basé sur les fonctions mathématiques


Traite le calcul comme l’évaluation de fonctions mathématiques
Évite les changements d’état et les données mutables
Se concentre sur ce qui doit être calculé, plutôt que sur comment
Origines : Lambda-calcul (Alonzo Church, années 1930)

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 3 / 30


Principes fondamentaux

Fonctions de première classe : Les fonctions sont des valeurs


Fonctions pures : Pas d’effets secondaires, sortie déterminée
uniquement par entrée
Récursion : Forme principale d’itération
Immutabilité : Les données ne changent pas après création
Transparence référentielle : Une expression peut être remplacée par
sa valeur
Évaluation paresseuse : Évaluer une expression seulement quand
nécessaire

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 4 / 30


Avantages de la programmation fonctionnelle

Concision : Moins de code pour exprimer des concepts complexes


Prédictibilité : Comportement plus facile à anticiper
Testabilité : Fonctions pures faciles à tester
Parallélisation : Absence d’état partagé facilite l’exécution parallèle
Modularité : Composition de fonctions facilite la réutilisation
Raisonnement mathématique : Plus proche des abstractions
mathématiques
Moins d’erreurs : Réduction des bugs liés aux états partagés

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 5 / 30


Python et la programmation fonctionnelle

Python est un langage multi-paradigme


Support de nombreux concepts fonctionnels :
Fonctions anonymes (lambda)
Fonctions d’ordre supérieur
Fonctions pures
Compréhensions de liste, de dictionnaire, etc.
Fonctions intégrées map, filter, reduce
Modules de support (functools, itertools)
Pas un langage fonctionnel pur, mais offre de bonnes capacités
fonctionnelles

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 6 / 30


Fonctions de première classe

Les fonctions sont des objets comme les autres


Peuvent être :
Assignées à des variables
Passées en arguments
Retournées par d’autres fonctions
Stockées dans des structures de données
1 om
2 salutation = saluer print(salutation("Alice")) "Bonjour, Alice"
3 Fonction dans une structure de donn
4 !es fonctions = [saluer, [Link], len] for f in fonctions
print(f("Python")) :

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 7 / 30


Fonctions d’ordre supérieur (I)

Fonctions qui prennent d’autres fonctions comme arguments


Permettent des abstractions puissantes
1 Utilisation avec diffrentes fonctions print(appliquer(len, "Python")) 6
print(appliquer(sum, [1, 2, 3, 4])) 10 print(appliquer(lambda x
2 x * x, 5)) 25 :

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 8 / 30


Fonctions d’ordre supérieur (II)

Fonctions qui retournent d’autres fonctions


Permettent de créer des générateurs de fonctions
5 doubler = multiplicateur(2) tripler = multiplicateur(3)
6 print(doubler(5)) 10 print(tripler(5)) 15

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 9 / 30


Fonctions lambda

Fonctions anonymes définies avec le mot-clé lambda


Syntaxe : lambda arguments: expression
Limitées à une seule expression
Utiles pour des fonctions simples utilisées une seule fois
7 Lambda avec condition estp air = lambdaxxprint(estp air (4))True
8 Lambda dans un tri personnes = [("Alice", 25), ("Bob", 30), ("Charlie",
22)] personnest riees = sorted(personnes, key = lambdapp[1])Tripar
9 ge print(personnest riees)

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 10 / 30


Récursion en programmation fonctionnelle

Alternative aux boucles dans les langages fonctionnels purs


Une fonction qui s’appelle elle-même
Composants :
Cas de base (condition d’arrêt)
Appel récursif (réduction du problème)
10 print(factorielle(5)) 120

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 11 / 30


Récursion terminale

Forme spéciale où l’appel récursif est la dernière opération


Peut être optimisée par le compilateur (pas en Python standard)
Évite la consommation excessive de la pile d’appels
11 print(factoriellet erminale(5))120
12 Note Python n’optimise pas la r
13 :cursion terminale par dfaut (limite de rcursion 1000 appels) ~

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 12 / 30


Immutabilité en Python

Types immuables natifs : int, float, str, tuple, frozenset


Types mutables : list, dict, set
L’immutabilité facilite le raisonnement sur le code
Patterns pour l’immutabilité :
14 Crer de nouvelles structures plutt que modifier def
ajoutere lement(t, element)
15 return t + (element,) Nouveau tuple
16 point3 d = ajoutere lement(point, 5)(3, 4, 5)print(point)Toujours(3, 4):

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 13 / 30


Classes immuables

Création de classes dont les instances sont immuables


Utilisation de slots et propriétés en lecture seule
1 def i nit( self ,x,y )self .x =xself .y =y

2 @property def x(self) return self.x


3 @property def y(self) return self.y
4 def deplacer(self, dx, dy) Retourne un nouveau point plut
5 :::t que modifier return Point(self.x + dx, self.y + dy)

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 14 / 30


Map, Filter, Reduce

Fonctions fondamentales de traitement de collections


Paradigme ”appliquer-à-tous” plutôt que boucles explicites
1 Map Applique une fonction
2 : chaque lment nombres = [1, 2, 3, 4, 5] carres = list(map(lambda
x x**2, nombres)) print(carres) [1, 4, 9, 16, 25]
3 Filter Filtre selon un pr::dicat pairs = list(filter(lambda x x
print(pairs) [2, 4]
4 Reduce R::duit une valeur unique somme = reduce(lambda x, y x + y,
nombres) print(somme) 15 :

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 15 / 30


Compréhensions

Alternative pythonique à map/filter


Plus lisible et souvent plus rapide
Types : liste, dictionnaire, ensemble, générateur
17 Avec filtre (quivalent filter) pairs = [x for x in nombres if x
18 Comprhension de dictionnaire carred ict = x
19 x**2 for x in nombres print(carred ict)1 : 1, 2 : 4, 3 : 9, 4 : 16, 5 : 25
20 Compréhension d’ensemble voyelles = c for c in "programmation" if c in
"aeiouy" print(voyelles) ’a’, ’i’, ’o’

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 16 / 30


Générateurs et évaluation paresseuse

Générateurs : séquences calculées à la demande


Avantages :
Économie de mémoire
Possibilité de traiter des séquences infinies
Composition efficace de transformations
21 Fonction gnratrice def nombresp remiers()
22 """G:nrateur infini de nombres premiers""" premiers = [] n = 2
while True if all(n [Link](n) yield n n += 1 :

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 17 / 30


Le module itertools

Bibliothèque d’outils pour manipuler des itérateurs


Inspiré par les séquences de Haskell
Fonctions pour combinaisons, permutations, produits, etc.
1 Produit cartsien for p in [Link]("AB", [1, 2])
2 print(p) (’A’, 1), (’A’, 2), (’B’, 1), (’B’, 2)
3 Combinaisons for c in [Link]([1, 2, 3, 4], 2) print(c)
(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)
4 Cycle infini cycle = [Link]([1, 2, 3]) print([next(cycle) for
i nrange(7)])[1, 2, 3, 1, 2, 3, 1]::

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 18 / 30


Composition de fonctions

Combiner des fonctions pour en créer de nouvelles


f ◦ g (x) = f (g (x))
Construction de pipelines de traitement
23 incr = lambda x x + 1 double = lambda x x * 2
24 f(g(x)) = double(incr(x)) = (x+1)*2
incrp uisd ouble = composer (double, incr )print(incrp uisd ouble(3))8
25 Module [Link] (Python 3.11+) from functools import compose
Disponible dans Python 3.11+ incrp uisd ouble = compose(double, incr )
26 ::

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 19 / 30


Curryfication

Transformer une fonction à plusieurs arguments en chaı̂ne de


fonctions à un argument
f (x, y , z) ⇒ f ′ (x)(y )(z)
Facilite la composition et l’application partielle
27 Version currifie def additionc urry (x)
28 def ajoutery (y )defajouterz (z)returnx + y + zreturnajouterz returnajoutery
29 Utilisation
ajouter5 = additionc urry (5)ajouter5e t3 = ajouter5 (3)resultat = ajouter5e t3 (2)10:

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 20 / 30


Application partielle

Fixer certains arguments d’une fonction


Créer une nouvelle fonction avec moins de paramètres
Module [Link]
5 Fonction originale def puissance(base, exposant) return base ** exposant
6 Application partielle carre = partial(puissance, exposant=2) cube =
partial(puissance, exposant=3)
7 print(carre(5)) 25 print(cube(5)) 125
8 Application pour les fonctions int
9 :gres from operator import mul doubler = partial(mul, 2)
print(list(map(doubler, [1, 2, 3, 4]))) [2, 4, 6, 8]

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 21 / 30


Décorateurs

Fonctions qui modifient d’autres fonctions


Application du principe des fonctions d’ordre supérieur
Permet la séparation des préoccupations
30 def chronometre(fonction) def wrapper(*args, **kwargs) debut =
[Link]() resultat = fonction(*args, **kwargs) fin = [Link]()
print(f"Temps d’ex
31 ::cution fin - debut.4f secondes") return resultat return wrapper
32 @chronometre def operationl ente()[Link](1)return”Op ::rationtermine”
33 operationl ente()Afficheletempsd : ’excution

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 22 / 30


Fermetures (Closures)

Fonctions qui ”capturent” leur environnement lexical


Permettent de conserver un état sans variables globales
Base des fabriques de fonctions
3 def incrementer() nonlocal count R
4 :frence la variable externe count += 1 return count
5 return incrementer
6 Cration de deux compteurs indpendants compteur1 = compteur() compteur2 =
compteur()
7 print(compteur1()) 1 print(compteur1()) 2 print(compteur2()) 1
(indpendant de compteur1)

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 23 / 30


Monades

Concept avancé pour encapsuler des calculs et effets


Permet de chaı̂ner des opérations tout en gérant les cas spéciaux
Populaire en Haskell, moins courant en Python
34 def bind(self, func) if [Link] is None return Maybe(None) return
func([Link])
35 @staticmethod def unit(value) return Maybe(value)
36 Utilisation def diviserp ar (x)defdivision(y )ifx ==
0returnMaybe(None)returnMaybe(y /x)returndivision
37 resultat = Maybe(10).bind(diviserp ar (2)).bind(diviserp ar (0))
38 :::

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 24 / 30


Traitement de données

La programmation fonctionnelle est idéale pour :


ETL (Extract, Transform, Load)
Data Science
Traitement en flux
39 def normaliser(donnees) mx = max(donnees) return [d / mx for d in
donnees]
40 def traiter(donnees) return list(map(lambda x x**2, donnees))
41 Pipeline complet pipeline = lambda donnees
traiter(normaliser(nettoyerd onnees(donnees)))
42 resultat = pipeline([1, None, 3, None, 5])
43 ::::

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 25 / 30


Tests unitaires

Les fonctions pures sont faciles à tester


Entrées et sorties bien définies
Pas d’état externe à gérer
44 Tests unitaires def testf ibonacci()Entr
45 es et rsultats attendus bien dfinis assert fibonacci(0) == 0 assert
fibonacci(1) == 1 assert fibonacci(2) == 1 assert fibonacci(3) == 2
assert fibonacci(4) == 3 assert fibonacci(5) == 5 print("Tous les
tests passent ")
46 testf ibonacci()!

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 26 / 30


Concurrence et parallélisme

L’absence d’état partagé facilite la parallélisation


Mapping sur plusieurs cœurs avec multiprocessing
10 Fonction de calcul intensif def calculer(n) return sum(i*i for i in
range(n))
11 Ex
12 :cution squentielle
resultatss eq = [calculer (n)fornin[10 ∗ ∗6, 10 ∗ ∗6, 10 ∗ ∗6, 10 ∗ ∗6]]
13 Excution parallle with Pool(processes=4) as pool
resultatsp ar = [Link](calculer , [10 ∗ ∗6, 10 ∗ ∗6, 10 ∗ ∗6, 10 ∗ ∗6])
14 Les deux approches donnent le m:me rsultat assert
resultatss eq == resultatsp ar

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 27 / 30


Récapitulatif

La programmation fonctionnelle offre :


Code plus concis et déclaratif
Meilleure testabilité et prédictibilité
Facilité de parallélisation
Réduction des bugs liés à l’état
Python n’est pas un langage fonctionnel pur mais :
Offre de nombreuses fonctionnalités fonctionnelles
Permet un style hybride pragmatique
Bon langage pour s’initier aux concepts fonctionnels

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 28 / 30


Ressources d’apprentissage

Livres :
”Functional Programming in Python” - David Mertz
”Python Cookbook” - David Beazley & Brian K. Jones
En ligne :
Documentation Python : functools, itertools
Real Python : Tutoriels sur la programmation fonctionnelle
GitHub : Awesome Functional Python
Bibliothèques :
toolz : Utilitaires fonctionnels
[Link] : Extensions fonctionnelles
pymonad : Implémentation de monades

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 29 / 30


Merci de votre attention !
Questions ?

Klazé Faı̈rousse DAO Programmation Fonctionnelle : Python 20 mai 2026 30 / 30

Vous aimerez peut-être aussi