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)
# 결과값 -> 4
lambda
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개의 함수가 생성되어 코드가 더 길고 사용하기에 불편하게 되어버린다.