람다는 인라인 함수를 정의할 때 사용하며 익명 함수(anonymous functions) 또는 람다 표현식(lambda expression)이라고 부른다.
파이썬 함수는 보통 다음과 같은 형식을 가진다.
def name(arg1, arg2) block of statement
람다와 차이점은 다음과 같다
- 이름의 유무
- 함수는 내부에서 처리하는 로직들을 여러문장으로 작성하는 블록으로 구성할 수 있다.
- 람다 표현식의 본체에는 인라인 형식의 간단한 표현식만 올 수 있다.
- 람다 표현식은 함수와 같이 return문이 없어도 표현식의 결과가 리턴된다.
람다 표현식도 nested 될 수 있고 다소 복잡한 구조를 가질 수 있지만 람다의 가장 일반적인 형식은 다음과 같다.
lambda argument1, argument2, ..... argumentN : expression using arguments
람다의 예제 코드는 다음과 같다.
f = lambda x,y,z : x+y+z print(f) # <function <lambda> at 0x10343e710
위의 코드를 살펴보면 x,y,z는 argument1,2,3에 해당하고 expression은 x+y+z이다. 따라서 간단하게 테스트해보면 function 로 출력되는 것을 확인할 수 있고 실제 함수처럼 인자를 입력해서 호출해보면 1,2,3을 더한 6이 출력되는 것을 확인할 수 있다. 람다는 다음과 같이 무조건 함수로 다시 작성할 수 있다.
예제 코드는 다음과 같다.
def add_func(x,y,z): return x+y+z
함수로 다시 작성한 함수를 보면 람다에 한줄로 return x+y+z를 쓸 수 있을것 같지만
람다는 표현식이므로 return을 사용할 수 없다.
람다가 유용하게 사용되는 경우
- 간단한 인라인 콜백함수를 만들거나 함수안에서 복잡한 처리를 할 수 없을 때
- 콜백함수란 어떤 이벤트가 발생했을 때 호출되는 함수인데 콜백함수가 여러블록으로 구성된 실행문이 아니고 다른 컴포넌트에서 사용되지 않는다면 해당 컴포넌트만을 위한 람다 표현식이 적절
다음과 같은 어떤 정수에 2제곱, 3제곱, 4제곱을 하는 예제에서 함수보다 람다로 구현하는것이 낫다.
람다 표현식 코드
Lambdas = [ lambda x : x ** 2, lambda x : x ** 3, lambda x : x ** 4 ] for lambda_func in Lambdas: print(lambda_func(2))
기본 함수 코드
def square(x): return x**2
def power_3(x):
return x ** 3
def power_4(x):
return x**4
powers = [square, power_3, power_4]
for f in powers:
print(f(2))