[파이썬] 람다(lambda) 함수
* 스스로 공부한 내용을 바탕으로 작성한 글입니다. 부정확한 부분이나 오류가 있을 수 있으며, 발견 시 댓글로 알려주세요!
파이썬에서 코드를 작성하다 보면 반복되는 작업을 위해 함수를 선언해 주는 경우가 있다. 함수를 선언할 때는 함수의 이름과 매개변수, 함수에서 수행할 코드를 작성하면 된다. 어떤 때에는 함수에서 한 줄의 간단한 코드만 수행해야 할 때도 있다. 이런 때는 함수로 정의해도 좋지만, 람다 함수를 사용하여도 좋다. 람다 함수가 무엇인지 알아보자.
람다 함수는 이름없이 한 줄에 매개변수와 표현식만을 사용하면 된다. 람다함수는 정의한 곳에서 한 번만 사용가능하고, 일반 함수처럼 다시 불러와서 사용할 수 없다. 따라서 간단한 함수를 사용해야 하면서 코드에서 두 번 이상 사용하지 않는다면 람다 함수로 정의해서 사용하는 것이 좋다.
# 일반적인 함수
def 함수이름(매개변수):
return 결과
# 람다 함수로 표현하기
lambda 매개변수 : 결과
# 람다 함수 사용하기
(lambda 매개변수 : 결과)(인수)
파이썬의 내장 함수와 람다 함수를 함께 사용하는 경우도 많다. 가장 대표적인 경우 몇가지를 작성하도록 하겠다.
1. map()
map() 함수는 다음과 같이 활용된다. map(함수, 리스트)를 사용하게 되면 리스트 속의 각 요소에 함수를 적용시킵니다. 이렇게 리스트의 요소 하나하나에 함수를 적용해 주는 것을 mapping이라고 합니다. 단순히 map만 사용하고 출력하게 되면 mapping된 객체를 출력해 주기 때문에, 대부분은 해당 결과를 리스트에 담아서 출력하게 된다. map 함수의 인자로 람다함수를 사용하게 되면, 훨씬 더 간단하게 코드를 작성할 수 있다.
# map 함수
map(함수, 리스트)
# map 함수 사용 예시
temp1 = list(map(int, range(5)))
print(temp)
>>> [0, 1, 2, 3, 4]
# map 함수 + 람다 함수 사용 예시
temp2 = list(map(lambda x : x+1, range(5)))
print(temp2)
>>> [1, 2, 3, 4, 5]
2. reduce()
reduce 함수도 map과 기능은 비슷하다. 하지만 조금 더 복잡한데, 입력된 데이터들을 누적하여 계산한다. 말로 하면 헷갈리므로 코드를 통해 직접적으로 확인해보면 이해하기 수월하다.
# reduce 함수
from functools import reduce
reduce(함수, 리스트 (,초기값 ; 생략 가능))
# reduce 함수 + 람다 함수 사용 예시 1
print(reduce(lambda x : x+y, range(5)))
>>> 10 # 계산 과정 : (((((0+1)+2)+3)+4)
# reduce 함수 + 람다 함수 사용 예시 2. 초기값 설정
print(reduce(lambda x : x+y, range(5), 10))
>>> 20 # 계산 과정 : 10 + (((((0+1)+2)+3)+4)
3. filter() 함수
filter() 함수는 이름에서 추측할 수 있듯이 내부 요소들을 조건에 맞게 걸러서 추출하는 함수이다. filter 함수를 사용할 때 필요한 조건을 람다식을 통해서도 표현할 수 있다.
# filter 함수
filter(조건 함수, 리스트)
# filter 함수 + 람다 함수 사용 예시
print(list(filter(lambda x : x%2 == 0, range(10))))
>>> [0, 2, 4, 6, 8] # 계산 과정 : [0,1,2,3,4,5,6,7,8,9]의 리스트 중에서, x%2==0의 조건을 만족하는 짝수만 출력