람다식을 이용해보자

Limm_jk·2020년 4월 8일
0

Python

목록 보기
1/2
post-thumbnail

그래서 람다식이 무엇인가요??

람다식(Lambda Expression)은 def같이 함수를 선언하지 않고 임시로 사용할 수 있도록 간단히 선언한 함수를 의미합니다. 다른 함수의 인수로 넣을 때, 간편하게 작성할 수 있어 주로 사용됩니다. 선언 없이 사용하며 재사용이 불가능하기 때문에 익명함수라고도 불립니다.

  • 람다식의 장점
  1. 코드를 간결히 만들 수 있습니다.
  2. 간결해지므로 가독성이 향상됩니다.
  3. 함수를 따로 만들 필요가 없으므로 개발 시간이 단축됩니다.
  4. 병렬프로그래밍에 용이합니다.
  • 람다식의 단점
  1. 람다식으로 만든 함수는 재사용이 불가능합니다.
  2. 이로 인하여 같은 함수를 중복 생성하여 비 효율적인 코드를 만들 확률이 높아집니다.
  3. 디버깅이 까다로운 것 같습니다.

1. 기본 사용법

람다식은 이렇게 사용할 수 있습니다.

lambda x : x + 10

허나 이렇게 사용하면 함수를 호출하는 것이 되므로 값을 얻을 수 없을 것입니다. 이대로 실행해봤더니 함수 객체가 출력되었습니다.
그렇다면 어떻게 써야할까요??

function = lambda x : x + 10
function(1)

이렇게 사용하면 1에 10을 더한 11을 반환받을 수 있습니다. 위의 그림은 람다식을 변수에 할당하여 사용한 모습입니다.

허나, 익명함수인데 뭔가 더 간단하게 써야할 것 같지 않나요??
그래서 변수에 할당 없이 아래와 같이도 사용이 가능합니다.

(lambda x : x + 10) (1)

이것도 똑같이 11이라는 출력을 받을 수 있습니다.

2. 응용

변수 하나만이 아닌 두개도 가능합니다.

(lambda x, y : x + y) (10, 20)

이렇게 사용하면 30을 반환받을 수 있습니다.

다음은 다른 함수와 사용해볼까요??
입력받을 때 많이 쓰는 map()함수를 이용해보겠습니다.

  • map함수 응용
    map함수는 map(함수,리스트)로 사용되는데 이 함수 자리에 람다식을 사용하여 표현해보겠습니다.
    배열 arr이 존재한다고 가정하고, 이 배열을 모두 어떠한 값 N으로 나누려면 저희는 for문을 이용해서 많이들 접근하리라 생각합니다. 이때 map함수를 이용하여 아래와 같이 표현하면, 간단한 식으로 표현할 수 있습니다.

    list(map(lambda x : x/N, arr))

    이렇게 표현하면 arr를 모두 N으로 나눈 값을 다시 리스트에 담을 수 있습니다.

다음은 이번에 공부하면서 새로배운 reduce함수를 이용하여 응용해보겠습니다.

  • reduce함수 응용
    reduce함수는 reduce(함수,리스트)로 이용됩니다. 이렇게 사용하면, 이전 연산에 누적해서 함수연산을 하는데요, 예를 들면, 함수가 x+y이고 리스트가 1,2,3,4,5,6이라면, 1+2=3 다음에 3+3=6 6+4 = 10 ... 이런 식으로 이전 연산의 결과와 재연산을 한답니다. 문자열에도 사용이 가능합니다. 람다식이 적용된 식에서 예시를 볼까요??

    reduce(lambda x,y : y+x, arr)

    그럴듯한 결과를 보고 싶어서 람다식을 y+x로 해두었습니다. 무슨 차이가 있냐구요?? 차이는 문자열일때 발생합니다. arr가 a,b,c,d,e의 문자열이라고 가정하면 위 식의 결과는 b에 a를 붙여서 ba -> c에 ba를 붙여서 cba ... 결과적으로 edcba가 반환됩니다. 신기하네요.

3. 결론

람다식은 함수를 매개로 받는 함수 내에서 굉장히 유용하게 쓰이는 것 같습니다! 잘 활용하면 간소화 시킬 수 있는 식이 많을 것 같네요. 최근 람다식의 활용이 각광받는 만큼 의식적으로 사용해보고, 어디에서의 활용이 효율적이고 어디에서 비효율적인지 몸에 익혀야 할 것 같습니다.

감사합니다!

profile
소신있는 백엔드 엔지니어가 꿈입니다.

0개의 댓글