Python으로 코딩테스트를 준비하면서 코딩테스트의 삐약이가 다른 사람의 코드를 참고할 때를 보면, lambda를 사용해서 문제를 푼 풀이들이 많이 보일 것이다. 그리고 댓글에는 "아.. lambda..." 이런식의 댓글들을 많이 볼 수 있었다. 하지만, lambda가 무엇인지 모르면 나처럼 lambda 식을 봐도 공감할 수 없을 것이다.
우선 Python의 lambda
는 익명 함수(anonymous function)을 만들때 사용되는 키워드이다.
여기서 익명 함수는 한글 그대로 이름이 없는 함수를 의미한다.
lambda
함수는 def
키워드를 사용하여 함수를 정의하는 것 보다 간결하게 코드를 작성할 수 있고, 한 줄로 함수를 작성할 수 있다.
lambda
함수는 보통 다른 함수 내에서 사용이 되는데, 함수 내에서 lambda
함수를 정의하면 해당 함수에서만 사용 가능한 지역 함수(local function)가 되어, 코드의 가독성과 유지 보수성을 높일 수 있다.
원래 함수는 복잡한 명령들을 편하게 사용할 수 있도록 모아두는 역할인데, def를 사용해 다른 함수를 만들고, 호출하는 것을 반복하는 불필요한 동작을 하지 않기 위해 만들어진 것이 lambda
함수이다.
lambda arguments: expression
lambda
함수의 기본 구문이다. 위의 구문에서 arguments는 함수에 전달되는 인자들의 리스트를 의미하며, expression은 함수의 실행 결과를 반환하는 식(expression)이다.
예를 들어, 두 개의 인자를 받아 더하는 lambda
함수는 아래와 같다.
lambda x,y: x + y
이 함수는 x 와 y 라는 두 개의 인자를 받아 덧셈 연산을 수행한 뒤에 결과 값을 반환한다.
lambda
함수는 복잡한 명령들을 편하게 사용하고 불필효한 동작을 반복하지 않기 위해 가볍게? 만든 함수 이기 때문에 코드를 보면 매우 간단하게 나타내어 진다.
예를 들어, lambda
를 사용하지 않고 짝수를 판별하는 함수를 만든다고 하면, 아래의 코드와 같을 것이다.
def unuse_lambda(x):
return x % 2 == 0
하지만 이것을 lambda
로 표현하게 된다면, 아래와 같이 작성될 것이다.
use_lambda = lambda x: x % 2 == 0
lambda
함수는 함수형 프로그래밍에서 유용하게 사용됩니다. 예를 들어, map()
이나 filter()
함수와 함께 사용하여 리스트나 딕셔너리 등의 자료형을 쉽게 처리할 수 있습니다. 또한, lambda
는 콜백 함수(callback function)로도 자주 사용된다.
map(함수, 리스트 or 튜플)
이 함수는 함수와 리스트를 인자로 받는다. 그리고, 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음에 그 결과를 새로운 리스트에 담아준다.
#일반 함수
def plus_ex(x):
return x + 2
result1 = list(map(plus_ex, [1, 2, 3, 4, 5]))
print(result1) #Output: [3, 4, 5, 6, 7]
#람다 함수
result2 = list(map(lambda x: x + 2, [1, 2, 3, 4, 5]))
print(result2) #Output: [3, 4, 5, 6, 7]
filter(함수, 리스트 or 튜플)
filter 함수는 map 함수와 비슷하게 리스트나 튜플을 두번째 인자로 받아서 첫 번째 인자로 함수를 받는다.
첫 번째 인자에는 두 번째 인자로 들어온 리스트나 튜플을 하나씩 받아 필터링할 함수를 넣는데, 두 번째 인자에는 리스트나 튜플을 넣는다.
예로, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 까지의 리스트가 있을 때 짝수들만 filter 함수를 이용해서 리스트를 다시 만든다면, 아래와 같이 lambda를 사용할 수 있다.
#일반 함수
def even_ex(x):
return x % 2 == 0
result1 = list(filter(even_ex, range(10))) #[0 ~ 9]
print(result1) #Output: [0, 2, 4, 6, 8]
#람다 함수
result2 = list(filter(lambda x: x % 2 == 0, range(10)))
print(result2) #Output: [0, 2, 4, 6, 8]
람다에 대해서 간단하게 알아 보았는데 코딩테스트에서 문제를 풀 때 적절히 사용할 수 있는 연습이 필요해 보인다.