간단한 함수를 일회성으로 표현할 수 있다.
lambda 함수는 코딩테스트 문제 사이트에서 다른 사람들의 답안에서 흔히 볼 수 있는 문법이다. 필자 또한 다른 사람들의 코드에서 자주 봐왔고, 복잡하고 어려워 보여 쉽게 도전해보지 못했던 문법이었다.
하지만 한 번 이해해보니 다른 함수와 응용하여 어려운 문제도 쉽게 해결할 수 있는, 활용도가 높은 매력적인 문법이라 느꼈다.
또한 lambda 표현은 단순히 가독성 향상과 코드의 간결함 뿐만 아니라, 메모리 절약이라는 장점이 있어 꼭 알아야 할 필수적인 개념이다.
그럼 함께 lambda의 개념과 응용 방법에 대해 공부하고 정리해 보자!
def func(x) :
return x+1
위 방식은 우리가 일반적으로 알고 있는 함수 정의 방식으로, def 키워드를 이용한 리터럴 표기법에 따른 함수 생성 방법이다.
이때 리터럴 표기법을 따른다는 것은 파이썬에서 함수 또한 클래스를 통해 생성된 객체 인스턴스이며, 변수에 들어갈 수 있는 리터럴이기 때문이다.
이때 정의하는 함수가 단 한 번 사용될 함수라면, 그 함수를 만들기 위해 함수(function) 클래스를 호출하는 일련의 과정은 불필요한 메모리 낭비를 하게되는 셈이다.

이러한 낭비를 방지하기 위해 일회성으로 사용될 가벼운 함수를 아래와 같이 lambda를 이용해 표현해줄 수 있다.
>>> lambda x : x+1
>>> (lambda x : x+1)(5)
6
lambda는 일회성 함수를 간단히 표현하기 위한 것이므로 여러번 호출하기 위해서는 아래와 같이 정의와 동시에 변수에 담아줘야 한다.
>>> func = lambda x : x+1
>>> func(5)
6
- map 함수는 iterable 객체로부터 원소를 하나씩 꺼내서 function의 매개변수로 함수를 수행하게 한다. 그리고 수행 결과인 return 값을 묶어 map 객체로 변환한다.
>>> list(map(lambda x: x ** 2, range(5)))
[0, 1, 4, 9, 16]
>>> list(map(int, ['1', '2', '3']))
[1, 2, 3]
- sequence 객체를 돌면서 데이터 속 각각의 값에 대해 function을 실행
- 이때 function은 대체로 매개변수 두 개를 받는다.
- 인덱스 0과 1에 대해 function을 수행 후, 그 결과와 인덱스 2에 대해 또 다시 function을 수행하고, 마지막 인덱스까지 반복적으로 함수를 실행하여 하나의 결과를 출력한다.
>>> from functools import reduce
>>> reduce(lambda x, y : x + y, [0, 1, 2, 3, 4])
10
>>> reduce(lambda x, y: y + x, 'abcde')
'edcba'
- filter 함수는 map 함수와 비슷하지만, function 객체의 return 결과가 True, 즉 참인 값만 모아 새로운 filter 객체를 반환한다.
>>> list(filter(lambda x: x, [0,0,1,2]))
[1, 2]
>>> list(filter(lambda x: x < 5, range(10)))
[0, 1, 2, 3, 4]