Du bon usage des expressions lambda en Python

Par:
fredericmazue

ven, 28/09/2018 - 15:36

A lire, ce très intéressant billet en anglais. L'auteur, Trey Hunner, est un programmeur avancé en Python  qui donne aussi des cours sur ce langage.

Trey n'aime pas les expressions lambda et le dit clairement : J'ai une aversion pour les expressions lambda depuis des années et depuis que j'enseigne Python, cette aversion est devenue plus forte.

Dans son billet, Trey discute du pour et du contre des expressions lambda. On peut ne pas être d'accord avec l'ensemble de son texte. Mais Trey a au moins l'indéniable mérite de montrer du code Python aberrant, mettant en oeuvre les expressions lambda. Rien que pour la mise au point qu'il apporte, le billet mérite d'être lu. Par exemple :

normalize_case = lambda s: s.casefold()

Une expression lambda est par définition une fonction anonyme. L'assigner à une variable est donc totalement contre leur nature. D'ailleurs le guide de style PEP8 recommande de ne jamais coder ainsi.

Autre exemple :

sorted_numbers = sorted(numbers, key=lambda n: abs(n))

Ici le code veut passer une expression lambda à une fonction de tri. Mais une expression lambda n'est qu'une fonction anonyme. Ce n'est pas parce que c'est une expression lambda qu'on peut la passer en argument à une autre fonction, mais simplement parce qu'elle est une fonction. Et en Python, toute fonction peut être passée en argument à une autre. Donc, l'exemple ci-dessus doit être tout simplement

sorted_numbers = sorted(numbers, key=abs)

:-)

Autre exemple :

pairs = [(4, 11), (8, 8), (5, 7), (11, 3)]
sorted_by_smallest = sorted(pairs, key=lambda x, y: min(x, y))

Doit tout simplement être écrit comme ceci :

pairs = [(4, 11), (8, 8), (5, 7), (11, 3)]
sorted_by_smallest = sorted(pairs, key=min)

Commentaires

je con plique, donc je suis un telligent.