람다식(Lambda Expression)은 def같이 함수를 선언하지 않고 임시로 사용할 수 있도록 간단히 선언한 함수를 의미합니다. 다른 함수의 인수로 넣을 때, 간편하게 작성할 수 있어 주로 사용됩니다. 선언 없이 사용하며 재사용이 불가능하기 때문에 익명함수라고도 불립니다.
람다식은 이렇게 사용할 수 있습니다.
lambda x : x + 10
허나 이렇게 사용하면 함수를 호출하는 것이 되므로 값을 얻을 수 없을 것입니다. 이대로 실행해봤더니 함수 객체가 출력되었습니다.
그렇다면 어떻게 써야할까요??
function = lambda x : x + 10
function(1)
이렇게 사용하면 1에 10을 더한 11을 반환받을 수 있습니다. 위의 그림은 람다식을 변수에 할당하여 사용한 모습입니다.
허나, 익명함수인데 뭔가 더 간단하게 써야할 것 같지 않나요??
그래서 변수에 할당 없이 아래와 같이도 사용이 가능합니다.
(lambda x : x + 10) (1)
이것도 똑같이 11이라는 출력을 받을 수 있습니다.
변수 하나만이 아닌 두개도 가능합니다.
(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가 반환됩니다. 신기하네요.
람다식은 함수를 매개로 받는 함수 내에서 굉장히 유용하게 쓰이는 것 같습니다! 잘 활용하면 간소화 시킬 수 있는 식이 많을 것 같네요. 최근 람다식의 활용이 각광받는 만큼 의식적으로 사용해보고, 어디에서의 활용이 효율적이고 어디에서 비효율적인지 몸에 익혀야 할 것 같습니다.
감사합니다!