
Lambda란,
인라인 함수를 정의할 때 사용하며,
anonymous functions또는lambda expression이라고 부른다.
우리가 사용하는 일반적인 함수와의 차이점을 살펴보면,
로 크게 볼 수 있다.
먼저 일반적으로 사용하는 함수의 형태를보면,
def name(arg1, arg2 ...):
    block of statement으로 함수의 이름(name)이 적혀있고, 내부에서 블록으로 처리하는 로직들을 작성한다.
하지만 람다의 경우에는,
lambda argument1, argument2, ... argumentN : expression using arguments으로 간결하게 인라인으로 작성이 가능하다.
또한 람다는 return문이 없어도 표현식의 결과가 return된다.
람다 표현식도 nested 될 수 있고, 다소 복잡한 구조를 가질 수도 있지만 가장 일반적인 형식은 위 예시 코드이다.
또한, 일반적인 함수의 경우에는 객체를 만들고, 재사용을 위해 함수 이름(메모리)를 할당을 한다.
하지만 람다의 경우에는 익명함수이기 때문에 한번 쓰이고 다음줄로 넘어가면 힙(heap) 메모리 영역에서 증발하게 된다. (예외도 있음)
간단한 함수를 람다로 바꿔보는 예제를 보며 차이를 살펴보자.
일반적인 함수
def func(a):
    print(a * a)
func(2)
# 결과값 -> 4lambda
test_lambda = lambda a: print(a*a)
test_lambda(2)
# 결과값 -> 4이처럼 간결하게 작성할 수 있다.
람다는 간단하게 인라인 콜백함수를 만들거나, 함수 안에서 복잡한 처리를 할 수 없을 때 유용하게 사용할 수 있다.
콜백함수(callback)란 어떠한 이벤트가 발생했을때 호출되는 함수이다.
콜백함수가 여러 블록으로 구성된 실행문이 아니고, 다른 컴포넌트에서 사용되지 않는다면 해당 컴포넌트만을 위한 람다 표현식이 적절하다고 볼 수 있다.
Lambdas = [
    lambda x : x ** 2,
    lambda x : x ** 3,
    lambda x : x ** 4
]
for lambda_func in Lambdas:
    print( lambda_func(2) )위 코드를 일반적인 함수로 표현하게 된다면, 인라인 3줄이 아닌 3개의 함수가 생성되어 코드가 더 길고 사용하기에 불편하게 되어버린다.