Perhatikan kode python2 berikut
In [5]: points = [ (1,2), (2,3)]
In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
Ini tidak didukung di python3 dan saya harus melakukan hal berikut:
>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
Ini sangat jelek. Jika lambda adalah sebuah fungsi, saya bisa melakukannya
def some_name_to_think_of(p):
x, y = p
return x*x + y*y
Menghapus fitur ini di python3 memaksa kode untuk melakukan cara yang buruk (dengan indeks ajaib) atau membuat fungsi yang tidak perlu (Bagian yang paling mengganggu adalah memikirkan nama yang baik untuk fungsi yang tidak perlu ini)
Saya pikir fitur tersebut harus ditambahkan kembali setidaknya ke lambda saja. Apakah ada alternatif yang bagus?
Pembaruan: Saya menggunakan pembantu berikut untuk memperluas ide dalam jawaban
def star(f):
return lambda args: f(*args)
min(points, key=star(lambda x,y: (x*x + y*y))
Pembaruan2: Versi yang lebih bersih untukstar
import functools
def star(f):
@functools.wraps(f):
def f_inner(args):
return f(*args)
return f_inner
lambda
dihapus dari bahasa seluruhnya daripada membalikkan perubahan yang membuatnya lebih sulit untuk digunakan, tetapi Anda dapat mencoba memposting di python-ideas jika Anda ingin mengungkapkan keinginan untuk melihat fitur ditambahkan kembali.