Introduction à la programmation fonctionnelle en Python

La programmation fonctionnelle est un paradigme de programmation qui traite le calcul comme l’évaluation de fonctions mathématiques et évite les données d’état et les données mutables. En Python, bien que ce soit un langage de programmation orienté objet, plusieurs outils et structures de données nous permettent d’adopter une approche fonctionnelle pour résoudre des problèmes.

Dans le contexte de Python, la programmation fonctionnelle implique l’utilisation de fonctions comme des citoyens de première classe, c’est-à-dire que les fonctions peuvent être passées en tant qu’arguments à d’autres fonctions, retournées en tant que valeurs par d’autres fonctions, et assignées à des variables.

Python fournit plusieurs fonctions intégrées qui adhèrent à la philosophie fonctionnelle, parmi lesquelles map(), reduce(), filter(), et plus encore. Ces fonctions permettent de manipuler les listes et autres collections de données de manière expressive et concise.

Dans les sections suivantes, nous allons explorer en détail l’une de ces fonctions, la fonction filter(), et voir comment elle peut être utilisée pour effectuer des opérations complexes de manière simple et efficace.

Présentation de la fonction filter()

La fonction filter() est une fonction intégrée de Python qui fait partie des outils de programmation fonctionnelle du langage. Elle prend deux arguments : une fonction et une liste (ou tout autre itérable), et renvoie un nouvel itérable constitué des éléments de la liste pour lesquels la fonction renvoie True.

La syntaxe de la fonction filter() est la suivante :

filter(fonction, iterable)
  • fonction : C’est une fonction qui prend un élément de l’itérable et renvoie un booléen. Si cette fonction est None, la fonction filter() renvoie simplement les éléments de l’itérable qui sont True dans un contexte booléen.
  • iterable : C’est l’itérable dont les éléments seront filtrés.

La fonction filter() renvoie un objet filter. Pour obtenir une liste, vous pouvez convertir cet objet en liste en utilisant la fonction list().

Voici un exemple simple d’utilisation de la fonction filter() :

nombres = [1, 2, 3, 4, 5, 6]
pairs = list(filter(lambda x: x % 2 == 0, nombres))
print(pairs)  # Affiche : [2, 4, 6]

Dans cet exemple, la fonction filter() filtre les nombres pairs de la liste nombres. La fonction lambda lambda x: x % 2 == 0 renvoie True pour les nombres pairs, donc ces nombres sont inclus dans la nouvelle liste.

Dans les sections suivantes, nous allons explorer plus en détail comment utiliser la fonction filter() pour résoudre divers problèmes de programmation en Python.

Exemples d’utilisation de la fonction filter()

La fonction filter() est extrêmement polyvalente et peut être utilisée dans une multitude de situations. Voici quelques exemples qui illustrent comment elle peut être utilisée dans différents contextes.

Filtrer les nombres impairs d’une liste

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9]
impairs = list(filter(lambda x: x % 2 != 0, nombres))
print(impairs)  # Affiche : [1, 3, 5, 7, 9]

Dans cet exemple, nous utilisons filter() pour extraire tous les nombres impairs d’une liste.

Filtrer les valeurs nulles d’une liste

valeurs = [0, 1, False, True, None, '0', '1', '', 'Hello']
non_nulles = list(filter(None, valeurs))
print(non_nulles)  # Affiche : [1, True, '0', '1', 'Hello']

Ici, nous utilisons filter() pour supprimer toutes les valeurs qui sont False dans un contexte booléen (0, False, None,  », etc.).

Filtrer les éléments d’une liste qui correspondent à une condition spécifique

mots = ['apple', 'banana', 'cherry', 'date', 'elderberry']
avec_a = list(filter(lambda x: 'a' in x, mots))
print(avec_a)  # Affiche : ['apple', 'banana', 'date']

Dans cet exemple, nous utilisons filter() pour trouver tous les mots dans une liste qui contiennent la lettre ‘a’.

Ces exemples ne sont que la pointe de l’iceberg de ce que vous pouvez faire avec filter(). Avec un peu de créativité, vous pouvez l’utiliser pour résoudre une grande variété de problèmes de programmation en Python.

Combiner filter() avec d’autres outils fonctionnels

La fonction filter() peut être combinée avec d’autres outils de programmation fonctionnelle en Python pour créer des solutions puissantes et expressives. Voici quelques exemples de la façon dont vous pouvez le faire.

Combinaison de filter() et map()

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9]
carrés_pairs = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, nombres)))
print(carrés_pairs)  # Affiche : [4, 16, 36, 64]

Dans cet exemple, nous utilisons filter() pour extraire les nombres pairs de la liste, puis map() pour calculer le carré de chaque nombre pair.

Combinaison de filter() et reduce()

from functools import reduce

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9]
somme_impairs = reduce(lambda x, y: x + y, filter(lambda x: x % 2 != 0, nombres))
print(somme_impairs)  # Affiche : 25

Ici, nous utilisons filter() pour extraire les nombres impairs de la liste, puis reduce() pour calculer la somme de ces nombres.

Ces exemples montrent comment filter() peut être utilisé en combinaison avec d’autres outils de programmation fonctionnelle pour résoudre des problèmes complexes de manière concise et expressive en Python. En maîtrisant ces outils, vous pouvez écrire du code Python plus efficace et plus lisible.

Remplacer filter() par des outils plus Pythoniques

Bien que la fonction filter() soit un outil puissant, Python offre d’autres constructions qui peuvent souvent être plus lisibles et expressives. L’une de ces constructions est la compréhension de liste.

La compréhension de liste est une fonctionnalité Pythonique qui permet de créer de nouvelles listes de manière concise et lisible. Voici comment vous pouvez utiliser la compréhension de liste pour accomplir les mêmes tâches que la fonction filter().

Filtrer les nombres impairs d’une liste

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9]
impairs = [x for x in nombres if x % 2 != 0]
print(impairs)  # Affiche : [1, 3, 5, 7, 9]

Filtrer les valeurs nulles d’une liste

valeurs = [0, 1, False, True, None, '0', '1', '', 'Hello']
non_nulles = [x for x in valeurs if x]
print(non_nulles)  # Affiche : [1, True, '0', '1', 'Hello']

Filtrer les éléments d’une liste qui correspondent à une condition spécifique

mots = ['apple', 'banana', 'cherry', 'date', 'elderberry']
avec_a = [x for x in mots if 'a' in x]
print(avec_a)  # Affiche : ['apple', 'banana', 'date']

Comme vous pouvez le voir, la compréhension de liste peut souvent être une alternative plus Pythonique à la fonction filter(). Cependant, il est important de noter que filter() a toujours sa place, surtout lorsque vous travaillez avec de grands ensembles de données, car filter() renvoie un itérable, ce qui peut être plus efficace en termes de mémoire.

Conclusion

La fonction filter() est un outil puissant de la programmation fonctionnelle en Python. Elle permet de créer des solutions élégantes et expressives pour filtrer les éléments d’une collection. Que vous travailliez avec des listes, des tuples ou d’autres types d’itérables, filter() peut vous aider à écrire du code plus propre et plus efficace.

Cependant, comme nous l’avons vu, Python offre d’autres outils qui peuvent parfois être plus appropriés ou plus lisibles, comme la compréhension de liste. Il est donc important de connaître ces alternatives et de savoir quand les utiliser.

En fin de compte, le choix entre filter() et d’autres outils dépendra de votre situation spécifique, de vos préférences personnelles et du style de code que vous trouvez le plus lisible et le plus maintenable. Quel que soit l’outil que vous choisissez, l’important est de continuer à apprendre et à explorer les nombreuses fonctionnalités que Python a à offrir. Bonne programmation !

By laurent

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *