Considera il seguente codice python2
In [5]: points = [ (1,2), (2,3)]
In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
Questo non è supportato in python3 e devo fare quanto segue:
>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
Questo è molto brutto. Se il lambda fosse una funzione, potrei farlo
def some_name_to_think_of(p):
x, y = p
return x*x + y*y
La rimozione di questa funzionalità in python3 costringe il codice a fare il brutto modo (con indici magici) o creare funzioni non necessarie (la parte più fastidiosa è pensare a buoni nomi per queste funzioni non necessarie)
Penso che la funzione dovrebbe essere aggiunta di nuovo almeno ai soli lambda. C'è una buona alternativa?
Aggiornamento: sto usando il seguente aiuto che estende l'idea nella risposta
def star(f):
return lambda args: f(*args)
min(points, key=star(lambda x,y: (x*x + y*y))
Update2: una versione più pulita perstar
import functools
def star(f):
@functools.wraps(f):
def f_inner(args):
return f(*args)
return f_inner
lambda
che venga rimosso completamente dal linguaggio, quindi invertire le modifiche che lo hanno reso più difficile da usare, ma potresti provare a pubblicare su Python-ideas se desideri esprimere il desiderio di vedere la funzionalità aggiunta di nuovo.