Considérez le code python2 suivant
In [5]: points = [ (1,2), (2,3)]
In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
Cela n'est pas pris en charge dans python3 et je dois faire ce qui suit:
>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
C'est très moche. Si le lambda était une fonction, je pourrais faire
def some_name_to_think_of(p):
x, y = p
return x*x + y*y
La suppression de cette fonctionnalité dans python3 oblige le code à faire la moche (avec des index magiques) ou à créer des fonctions inutiles (la partie la plus ennuyeuse est de penser à de bons noms pour ces fonctions inutiles)
Je pense que la fonctionnalité devrait être ajoutée au moins aux lambdas seuls. Y a-t-il une bonne alternative?
Mise à jour: j'utilise l'aide suivante pour étendre l'idée dans la réponse
def star(f):
return lambda args: f(*args)
min(points, key=star(lambda x,y: (x*x + y*y))
Update2: une version plus propre pourstar
import functools
def star(f):
@functools.wraps(f):
def f_inner(args):
return f(*args)
return f_inner
lambda
d'être complètement supprimé du langage que d'annuler les modifications qui le rendaient plus difficile à utiliser, mais vous pouvez essayer de publier sur python-ideas si vous souhaitez exprimer le désir de voir la fonctionnalité ajoutée.