Aşağıdaki python2 kodunu düşünün
In [5]: points = [ (1,2), (2,3)]
In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
Bu python3'te desteklenmiyor ve aşağıdakileri yapmam gerekiyor:
>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
Bu çok çirkin. Lambda bir işlev olsaydı, yapabilirdim
def some_name_to_think_of(p):
x, y = p
return x*x + y*y
Python3'te bu özelliğin kaldırılması, kodu ya çirkin bir şekilde (sihirli indekslerle) yapmaya ya da gereksiz işlevler oluşturmaya zorlar (En rahatsız edici kısım, bu gereksiz işlevler için iyi isimler düşünmektir)
Özelliğin en azından tek başına lambdalara geri eklenmesi gerektiğini düşünüyorum. İyi bir alternatif var mı?
Güncelleme: Cevapta fikri genişleten aşağıdaki yardımcıyı kullanıyorum
def star(f):
return lambda args: f(*args)
min(points, key=star(lambda x,y: (x*x + y*y))
Güncelleme2: Daha temiz bir sürümstar
import functools
def star(f):
@functools.wraps(f):
def f_inner(args):
return f(*args)
return f_inner
lambda
dilden tamamen çıkarılma olasılığı daha sonra, kullanımı zorlaştıran değişiklikleri tersine çevirmek daha olasıdır , ancak özelliğin geri eklendiğini görme isteğinizi ifade etmek istiyorsanız python fikirlerini yayınlamayı deneyebilirsiniz.