다음 python2 코드를 고려하십시오.
In [5]: points = [ (1,2), (2,3)]
In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
이것은 python3에서 지원되지 않으며 다음을 수행해야합니다.
>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
이것은 매우 추합니다. 람다가 함수라면 할 수 있습니다.
def some_name_to_think_of(p):
x, y = p
return x*x + y*y
python3에서이 기능을 제거하면 코드가 추악한 방식 (매직 인덱스 사용)을 수행하거나 불필요한 함수를 생성합니다 (가장 귀찮은 부분은 이러한 불필요한 함수에 대한 좋은 이름을 생각하는 것입니다).
이 기능은 적어도 람다에만 다시 추가되어야한다고 생각합니다. 좋은 대안이 있습니까?
업데이트 : 답변에서 아이디어를 확장하는 다음 도우미를 사용하고 있습니다.
def star(f):
return lambda args: f(*args)
min(points, key=star(lambda x,y: (x*x + y*y))
Update2 : 더 깨끗한 버전star
import functools
def star(f):
@functools.wraps(f):
def f_inner(args):
return f(*args)
return f_inner
lambda
언어에서 완전히 제거 된 다음 사용하기 더 어렵게 만든 변경 사항을 되돌릴 가능성이 더 높지만 기능이 다시 추가되는 것을보고 싶은 욕구를 표현하고 싶다면 파이썬 아이디어에 게시 해 볼 수 있습니다.