람다는 실제로 함수형 프로그래밍의 아이디어에서 비롯된 매우 강력한 구조이며 가까운 장래에 파이썬을 쉽게 수정, 재정의 또는 제거하지 않는 것입니다. 그것들은 함수를 매개 변수로 전달할 수 있으므로보다 강력한 코드를 작성하는 데 도움이되므로 일급 시민으로서의 기능에 대한 아이디어를 얻을 수 있습니다.
람다는 혼동되는 경향이 있지만, 일단 이해가되면 다음과 같이 깔끔하고 우아한 코드를 작성할 수 있습니다.
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
위의 코드 줄은 목록에있는 숫자의 제곱 목록을 반환합니다. 물론 다음과 같이 할 수도 있습니다.
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
앞의 코드가 더 짧다는 것은 명백하며, 한 곳에서만 맵 함수 (또는 함수를 매개 변수로 사용하는 유사한 함수)를 사용하려는 경우에 특히 그렇습니다. 이것은 또한 코드를보다 직관적이고 우아하게 만듭니다.
또한 @David Zaslavsky가 그의 답변에서 언급했듯이 목록 이해가 항상 애매 모호한 방법으로 가치를 얻어야하는 경우가 아닙니다.
좀 더 실용적인 관점에서, 최근 람다의 가장 큰 장점 중 하나는 GUI 및 이벤트 중심 프로그래밍이었습니다. Tkinter에서 콜백을 살펴보면 인수로 취하는 것은 모두 트리거 된 이벤트입니다. 예 :
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
이제 몇 가지 주장을 전달하면 어떻게 될까요? 마우스 클릭의 좌표를 저장하기 위해 2 개의 인수를 전달하는 것만 큼 간단합니다. 다음과 같이 쉽게 할 수 있습니다.
def main():
# define widgets and other imp stuff
x, y = None, None
widget.bind("<Button-1>", lambda event: do-something-cool(x, y))
def do-something-cool(event, x, y):
x = event.x
y = event.y
#Do other cool stuff
이제 전역 변수를 사용 하여이 작업을 수행 할 수 있다고 주장 할 수는 있지만 특히 전역 변수가 특정 위치에서 사용되는 경우 메모리 관리 및 누출에 대해 걱정하고 있습니까? 프로그래밍 스타일이 좋지 않을 것입니다.
간단히 말해서, 람다는 훌륭하고 결코 과소 평가해서는 안됩니다. 파이썬 람다는 (더 강력한) LISP 람다와 같지 않지만, 실제로 많은 마법의 일을 할 수 있습니다.