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

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 문을 사용해 정식으로 정의하는 것이 올바른 방법이다.

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

개념 정리

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