함수를 프로그램 조각에 이름을 붙인 것이라고 설명했다. 하지만 프로그램 조각 중에는 너무 간단하거나, 다시 부를 필요가 없어서 굳이 이름을 붙이지 않아도 되는 경우도 있다. 이럴 때 이름이 없는 함수, 즉 익명 함수를 만들 수 있다.

3.6.1 람다 식

익명 함수를 만들 때는 def 문 대신 람다 식을 이용한다. 람다는 ‘람다 대수(lambda calculus)’라는 용어에서 따온 이름이다. 이름이 생소하겠지만 사용법은 어렵지 않으니 겁먹지 말자. 람다 식을 작성하는 양식은 다음과 같이 매우 간결하다.

lambda 매개변수: 반환값

람다 식은 입력과 출력이 있는 간단한 한 행짜리 함수를 만들 때 사용한다. 예를 들어, 매개변수 x에 전달받은 수보다 1 큰 수를 반환하는 함수는 다음과 같이 정의할 수 있다.

코드 3-22 람다 식를 이용한 함수 정의

>>> lambda x: x + 1

람다 식으로 만든 함수는 이름이 없다는 특징도 있지만, 같은 함수를 def 문으로 정의할 때보다 간결하다는 특징도 있다. 같은 함수를 def 문으로 작성하려면 다음과 같이 해야 한다.

코드 3-23 def 문으로 함수 정의

>>> def f(x):
...     return x + 1
... 

람다 식으로 정의한 함수는 변수에 대입해 두었다가 호출할 수도 있다. 이름이 없는 함수이지만, 변수에 대입하여 이름을 붙일 수도 있다.

코드 3-24 람다 식으로 만든 함수를 변수에 대입하기

>>> 두_수의_곱 = lambda a, b: a * b
>>> 두_수의_곱(10, 8)
80

위 코드는 람다 식으로 만든 함수를 호출할 수 있다는 것을 보여주기 위해 작성했다. 하지만 이렇게 람다 식으로 만든 함수를 변수에 대입해 사용하는 것은 파이썬 문화에서는 권장되지 않는다. 함수에 이름을 붙여야 한다면 def 문을 사용해 정식으로 정의하는 것이 더 올바른 방법이다.

람다 식은 너무 간단하거나 이름을 붙일 필요가 없는 함수를 만들 때 사용되는데, 지금은 언제 사용할 수 있을지 생각하기 어려울 것이다. 이런 게 있다는 것만 알아두고, 익명 함수가 필요할 때 좀 더 사용해보기로 하자.

개념 정리

  • 간단한 일회용 함수를 만들 때는 람다 식을 이용하면 좋다.