Les fonctions anonymes et les fonctions intégrées constituent deux piliers fondamentaux de la programmation fonctionnelle en Python. Leur maîtrise permet d’écrire du code plus concis, expressif et réactif.
Fonctions anonymes avec lambda
Une fonction anonyme est une fnoction sans identifiant explicite, définie sur une seule ligne à l’aide du mot-clé lambda. Sa syntaxe suit le modèle : lambda paramètres: expression. Elle retourne automatiquement le résultat de l’expression — aucun return n’est requis.
Ces fonctions sont principalement utilisées comme arguments pour des fonctions d’ordre supérieur (ex. : map, filter, sorted) plutôt que comme entités autonomes.
Fonctions intégrées clés
1. map() — Transformation élémentaire
Applique une fontcion à chaque élément d’un itérable et renvoie un itérateur de résultats.
valeurs = [5, 12, 19, 27]
transformees = map(lambda x: x * 2 - 3, valeurs)
print(list(transformees)) # [7, 21, 35, 51]
2. max() / min() — Sélection conditionnelle
Lorsqu’on travaille avec des structures complexes (ex. : dictionnaires), l’argument key permet de spécifier une fonction d’extraction utilisée pour comparer les éléments. Le résultat reste l’élément original — pas sa valeur transformée.
scores = {'Alice': 84, 'Bob': 92, 'Claire': 76, 'Dana': 98}
meilleur = max(scores, key=lambda nom: scores[nom])
print(meilleur) # 'Dana'
3. functools.reduce() — Agrégation séquentielle
Effectue une opération cumulative sur un itérable, réduisant celui-ci à une seule valeur. Nécessite l’import depuis functools.
from functools import reduce
nombres = [3, 6, 9, 12]
total = reduce(lambda acc, val: acc ** 2 + val, nombres)
print(total) # ((3² + 6)² + 9)² + 12 = 1452
4. zip() — Groupement par position
Combine plusieurs itérables en créant des tuples contenant les éléments de même indice. La longueur du résultat correspond à celle du plus court itérable fourni.
ids = [101, 102, 103]
noms = ['Léo', 'Mia']
ages = [24, 29, 31]
groupes = list(zip(ids, noms, ages))
print(groupes) # [(101, 'Léo', 24), (102, 'Mia', 29)]
5. filter() — Filtrage booléen
Génère un itérateur contenant uniquement les éléments pour lesquels la fonction fournie renvoie True.
valeurs = [-5, 0, 8, -12, 17, 3]
positifs = filter(lambda x: x > 0, valeurs)
print(list(positifs)) # [8, 17, 3]
6. sorted() — Tri flexible
Renvoie une nouvelle liste triée, sans modifier l’original. Prend en charge les arguments key et reverse.
mots = ['python', 'java', 'go', 'rust']
tri_par_longueur = sorted(mots, key=lambda s: len(s))
print(tri_par_longueur) # ['go', 'java', 'rust', 'python']
Aperçu rapide d’autres fonctions intégrées utiles
abs(x)→ valeur absolueall(iterable)→Truesi tous les éléments sont vraisany(iterable)→Truesi au moins un élément est vraibin(x),oct(x),hex(x)→ conversion de basebytes(obj, enc)→ encodage binaire (ex. : UTF-8)callable(obj)→ vérifie siobjpeut être invoquéchr(n)/ord(c)→ convresion entre code Unicode et caractèredir(obj)→ liste des attributs/méthodes accessiblesdivmod(a, b)→ tuple (a // b,a % b)enumerate(iterable, start=0)→ paires (index, valeur)eval(expr)/exec(code)→ exécution dynamique (à utiliser avec prudence)hash(obj)→ hachage immuable (utile pour les clés de dictionnaire)id(obj)→ identifiant mémoire uniqueisinstance(obj, type)→ test de type hiérarchique (gère l’héritage)pow(base, exp, mod=None)→ exponentiation (avec optionnel modulo)range(start, stop, step)→ générateur d’entiersround(x, n)→ arrondi àndécimales (suivant la règle « round half to even »)sum(iterable)→ somme arithmétique