Qual è il buon equivalente di Python3 per lo spacchettamento automatico della tupla in lambda?

|

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(punti, chiave=lambda p: p[0]*p[0] + p[1]*p[1]) (1, 2) 

Questo è molto brutto. Se la lambda fosse una funzione, potrei fare

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 a creare funzioni non necessarie (la parte più fastidiosa è pensare a buoni nomi per queste funzioni non necessarie)

Penso che la funzione dovrebbe essere aggiunto di nuovo almeno ai soli lambda. C'è una buona alternativa?


Aggiorna: sto usando il seguente helper estendendo l'idea nella risposta

def star( f): return lambda args: f(*args) min(points, key=star(lambda x,y: (x*x + y*y)) 

< strong>Aggiornamento2: Una versione più pulita per star

import functools def star(f): @functools.wraps(f): def f_inner(args ): return f(*args) return f_inner