본문 바로가기
Programming/Python

파이썬 람다 Lambda 함수와 (if~else,map,reduce, filter)응용

by whitele 2021. 8. 8.
반응형

 

람다 함수

 람다 함수는 일시적으로 사용하는 익명 함수입니다. 간결하면서 짧게 쓸 수 있기에 잘 사용한다면 좋은 코드를 쓸 수 있는 함수입니다. 단순한 일회용 함수이며 변수에 람다식을 대입하지 않는 이상 호출이 불가능하며 일시적으로 쓰입니다.

 

 기본식

 

lambda (인자):(표현식)

인자는 변수로 사용되는 인수들의 이름입니다. 위와 같은 단순 람다식은 호출이 불가능합니다.

 

ld_func=lambda x,y : x + y

다음과 같은 표현은 lambda 식을 나중에 호출하기 위해 사용합니다. 람다식을 변수에 직접 대입한 식입니다. x, y가 인자가 되며 x+y는 표현식이 됩니다.

lambda 호출 예

람다는 혼자로도 자주 사용되지만 다른 함수와 혼합하여 사용할 때 빛을 발합니다.

 

 

lambda 함수 응용

 

if~else 응용

lambda 안에 if~else문을 사용할 수 있습니다. lambda를 이용한 if~else문은 다음과 같습니다.

lambda (인자): (표현식1) if (조건식) else (표현식2)

조금 복잡해 보일 수도 있습니다. 때문에 너무 길고 복잡한 식이라면 lambda 식을 사용하는 것보다 def문을 통한 함수 작성이 더 좋을 수 도 있습니다.  다음 예는 if~else를 응용한 lambda 사용 예입니다.

if~else 응용 실행 예

 

map 응용

 map 함수는 반복 가능한 자료형을 특정 함수로 일괄 처리하는 함수입니다. if~else 예제에서 살짝 등장했는데 보다시피 같은 함수로 이터러블 자료를 일괄 처리하기 위해 사용합니다. 반환 값은 map 객체 그 자체라 list로 변환이 필요합니다.

map(function(),iterable) 형태이며 함수에 lambda 식을 넣어 응용할 수 있습니다.

list_a=[1,2,3,4,5,6,7]
list_a=list(map(lambda x:x+2,list_a))

map 응용 실행 예

 

filter 응용

filter는 map함수와 응용이 비슷합니다. filter(function,iterable)형태입니다. 함수에 따라 포함될지 안될지 여부를 정합니다.

list_a=[2,5,7,8,11,13,14]
list_a=list(filter(lambda x:x%2==0,list_a))

filter 응용 실행 예

 

reduce 응용

reduce 함수는 순환 가능한 값으로 누적 집계를 하기 위한 집계 함수입니다.

reduce(func,list)로 첫 번째 인자는 함수, 두 번째는 순회 가능한 값이 들어갑니다. reduce 함수는 응용중 유일하게 내장 함수가 아니기 때문에 functools 모듈을 import 해야 합니다.

from functools import reduce
list_a=[1,5,7,8]
reduce(lambda x,y:x*y,list_a)

reduce 응용 실행 예

 

 

lambda 마무리

 자체만으로도 활용도가 높지만 다른 함수와 사용할수록 그 활용도가 더 높아진다. 하지만 if~else문이나 복잡한 구문을 넣는다면 가독성을 해치기 때문에 좋지 않습니다. 오히려 def를 이용한 일반 함수 작성이 더 좋을 수도 있습니다. 줄이 길어지게 되면 가독성이 떨어지므로 이런 경우는 일반 함수로 작성하는 것을 추천합니다.

728x90
반응형

댓글