lambda(), map(), filter(), reduce() 함수는 함수를 간단하게 만들어주는 함수들로 파이썬에서 프로그래밍할 때 if elif else문을 이용하여 복잡하게 하드코딩할 필요없이 한줄로 함수를 구현하게 해주는 함수들입니다.
● lambda()
lambda 인자 : 표현식
함수를 한 줄로 만들어주는 함수입니다.
def plus(x, y):
return x + y
plus(10, 20)
와 같은 함수를 람다함수를 사용하면 함수명을 명시하지 않고 함수를 사용할 수 있습니다.
(lambda x,y:x + y)(10, 20)
람다함수는 런타임에서 생성해 사용할 수 있는 익명함수로, 쓰고버리는 일시적인 함수입니다.
이러한 람다함수도 람다함수를 변수에 할당하여 재사용할 수 있습니다.
lambdaAdd = lambda n,m:n+m
print(lambdaAdd(1,2))
# 결과 3
람다식 안에서 조건도 사용 가능합니다.
print((lambda n,m: n if n%2==0 else m)(1,3))
# 결과 3
print((lambda n,m: n if n%2==0 else m)(2,3))
# 결과 2
그리고 람다함수는 map, filter, reduce처럼 매개변수로 함수가 필요한 곳에 유용하게 사용할 수 있습니다.
● map()
map(함수, 리스트)
map()은 함수와 리스트를 인자로 받습니다. 그리고 그 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음, 그 결과를 새로운 리스트에 담아줍니다.
map(lambda x: x ** 2, range(5)) # 파이썬 2
# 결과 [0, 1, 4, 9, 16]
list(map(lambda x: x ** 2, range(5))) # 파이썬 2 및 파이썬 3
# 결과 [0, 1, 4, 9, 16]
● reduce()
reduce(함수, 순서형 자료)
reduce()는 순서형 자료인 문자열, 리스트, 튜플의 원소를 누적하여 함수에 적용시킵니다.
from functools import reduce # 파이썬 3
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# 결과 10
0과 1을 더하고, 그 결과에 3을 더하고, 그 결과에 4를 더하고를 반복합니다.
● filter()
filter(함수, 리스트)
리스트에 있는 원소들을 함수에 적용시켜 결과가 참인 값들로 새로운 리스트를 만들어주는 함수가 filter()입니다.
filter(lambda x: x < 5, range(10)) # 파이썬 2
# 결과 [0, 1, 2, 3, 4]
list(filter(lambda x: x < 5, range(10))) # 파이썬 2 및 파이썬 3
# 결과 [0, 1, 2, 3, 4]
참고글 : Python Lambda Function