Numérique et Sciences Informatiques > Langages de Programmation > Paradigmes de Programmation > Programmation fonctionnelle (notions de base)
Fonctions d'ordre supérieur en programmation fonctionnelle
Explorez les fonctions d'ordre supérieur, un concept essentiel en programmation fonctionnelle, permettant d'écrire du code plus flexible et réutilisable. Ce guide est conçu pour les élèves de lycée en NSI.
Définition des fonctions d'ordre supérieur
Une fonction d'ordre supérieur est une fonction qui : Les fonctions d'ordre supérieur sont un outil puissant pour l'abstraction et la réutilisation de code en programmation fonctionnelle. Elles permettent de créer des fonctions génériques qui peuvent être utilisées avec différentes fonctions spécifiques.
Exemples en Python
Python supporte les fonctions d'ordre supérieur de manière native. Voici quelques exemples: Exemples de code:
map()
: Applique une fonction à chaque élément d'un itérable (liste, tuple, etc.) et retourne un itérateur contenant les résultats.filter()
: Filtre les éléments d'un itérable en fonction d'une fonction de test (qui retourne True
ou False
) et retourne un itérateur contenant les éléments qui passent le test.reduce()
: (Nécessite from functools import reduce
) Applique une fonction cumulativement aux éléments d'un itérable, de gauche à droite, afin de réduire l'itérable à une seule valeur.
# map()
def carre(x):
return x * x
liste_nombres = [1, 2, 3, 4, 5]
carres = list(map(carre, liste_nombres))
print(carres) # Affiche [1, 4, 9, 16, 25]
# filter()
def est_pair(x):
return x % 2 == 0
liste_nombres = [1, 2, 3, 4, 5, 6]
pairs = list(filter(est_pair, liste_nombres))
print(pairs) # Affiche [2, 4, 6]
# reduce()
from functools import reduce
def addition(x, y):
return x + y
liste_nombres = [1, 2, 3, 4, 5]
somme = reduce(addition, liste_nombres)
print(somme) # Affiche 15
Création de fonctions d'ordre supérieur personnalisées
Vous pouvez également créer vos propres fonctions d'ordre supérieur. Voici un exemple: Dans cet exemple,
def appliquer_plusieurs_fois(fonction, n, argument):
resultat = argument
for _ in range(n):
resultat = fonction(resultat)
return resultat
def incrementer(x):
return x + 1
resultat = appliquer_plusieurs_fois(incrementer, 3, 5)
print(resultat) # Affiche 8 (5 + 1 + 1 + 1)
appliquer_plusieurs_fois
est une fonction d'ordre supérieur qui prend une fonction (incrementer
), un nombre n
, et un argument initial en entrée. Elle applique la fonction n
fois à l'argument et retourne le résultat final.
Currying (Curryfication)
Le currying, ou curryfication, est une technique qui consiste à transformer une fonction qui prend plusieurs arguments en une série de fonctions qui prennent chacune un seul argument. Exemple en Python: Dans cet exemple,
def multiplier(x):
def par(y):
return x * y
return par
# Créer une fonction qui multiplie par 5
multiplier_par_5 = multiplier(5)
# Utiliser la fonction créée
resultat = multiplier_par_5(3)
print(resultat) # Affiche 15
resultat2 = multiplier(2)(4) # Affiche 8
print(resultat2)
multiplier
est une fonction qui prend un argument x
et retourne une nouvelle fonction par
. La fonction par
prend un argument y
et retourne le produit de x
et y
. Ainsi, on a transformé une fonction à deux arguments en une série de fonctions à un seul argument.
Composition de fonctions
La composition de fonctions consiste à combiner deux ou plusieurs fonctions pour créer une nouvelle fonction. Le résultat de la première fonction est utilisé comme argument pour la deuxième fonction, et ainsi de suite. Exemple en Python : Dans cet exemple,
def carre(x):
return x * x
def incrementer(x):
return x + 1
# Composer les fonctions carre et incrementer
def compose(f, g):
def h(x):
return f(g(x))
return h
# Créer une fonction qui incrémente et ensuite calcule le carré
carre_apres_incrementer = compose(carre, incrementer)
# Utiliser la fonction composée
resultat = carre_apres_incrementer(2)
print(resultat) # Affiche 9 ((2 + 1)^2 = 3^2 = 9)
compose
est une fonction qui prend deux fonctions f
et g
en argument et retourne une nouvelle fonction h
. La fonction h
prend un argument x
et retourne f(g(x))
. Ainsi, on a combiné les fonctions carre
et incrementer
pour créer une nouvelle fonction carre_apres_incrementer
.
Avantages des fonctions d'ordre supérieur
L'utilisation de fonctions d'ordre supérieur présente plusieurs avantages :
Ce qu'il faut retenir
map()
, filter()
, et reduce()
sont des exemples de fonctions d'ordre supérieur en Python.
FAQ
-
Pourquoi utiliser des fonctions d'ordre supérieur ?
Les fonctions d'ordre supérieur permettent d'écrire du code plus générique, réutilisable et modulaire. Elles facilitent l'abstraction et la composition de fonctions, ce qui peut rendre le code plus clair et plus facile à maintenir. -
Quelle est la différence entre une fonction d'ordre supérieur et une fonction normale ?
Une fonction normale prend des valeurs comme arguments et retourne une valeur. Une fonction d'ordre supérieur prend des fonctions comme arguments et/ou retourne une fonction. -
Quand devrais-je utiliser des fonctions d'ordre supérieur ?
Vous devriez utiliser des fonctions d'ordre supérieur lorsque vous avez besoin d'appliquer une opération à une collection d'éléments, lorsque vous voulez créer des fonctions génériques qui peuvent être utilisées avec différentes fonctions spécifiques, ou lorsque vous voulez composer des fonctions pour créer de nouvelles fonctionnalités.