파이썬에서 함수를 정의하기 위해서는 def
키워드를 사용하는데 def 키워드를 사용하면 함수 정의와 호출이 따로 이루어지는 것이다. 람다 함수
를 사용하면 정의부터 호출까지 한번에 한줄로 가능하게 할 수 있다.
이 글에 언급하는 map
, filter
, reduce
함수 뿐만 아니라 sort
, sorted
함수에서도 유용하게 사용되니 잘 알고 있어야 한다.
람다 함수
는 이름이 없기 때문에 익명함수라고 부르기도 한다. 사용법은 간단하다. lambda 매개변수 : 표현식
이다.
def add(x,y):
return x+y
print(add(1,2))
위의 코드를 lambda를 사용해 다음과 같이 한줄로 나타낼 수 있다. 두 함수 모두 결과는 3이 나온다.
print((lambda x,y:x+y)(1,2))
map
함수의 첫번째 인자는 함수, 두번째 인자는 이터러블 객체
가 오는데 여기서 이터러블 객체
는 반복이 가능한 자료형으로 리스트
, 튜플
등이 있다.
map
함수는 이터러블 객체
의 각 요소들을 함수를 실행시켜 반환하는 기능을 한다.
첫번째 인자에서 lambda
함수를 사용하는 것이 일반함수를 정의해 사용하는 것보다 편리하기 때문에 다음과 같이 사용한다. map
객체가 리턴되기 때문에 list
로 형변환을 해줘야 한다.
list_a = [1, 2, 3, 4, 5]
print(list(map(lambda x: x+2, list_a)))
# 결과: [3, 4, 5, 6, 7]
filter
함수도 map
함수와 마찬가지로 첫번째 인자로 함수, 두번째 인자로 리스트나 튜플같은 터러블 객체
가 들어간다. filter
함수는 이터러블 객체의 각 요소들을 첫번째 인자의 함수로 실행했을 경우 True이면 값을 남긴다.
list_a=[1,2,3,4,5]
print(list(filter(lambda x: x %2==0,list_a)))
# 결과: [2,4]
함수형 프로그래밍에서 map
, filter
와 함께 reduce
도 많이 사용되는데 reduce
함수는 누적 집계를 구하기 위해 사용되는 함수이다. reduce(함수, 시퀀스, 초기값)
의 형태로 사용가능하다. 초기값에 따라 TypeError
가 발생할 수 있으니 이 점을 유의해야 한다.
from functoools import reduce
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# 결과: 10