본문 바로가기
CS/Python

[python3] Lambda (람다) 함수 개념과 활용법, 장단점 - 쉽고빠른파이썬

by Warehaus 2022. 11. 5.



오늘은 파이썬에서 사용하는 람다 함수에 대해
간단히 알아볼까 합니다.

경우에 따라 자주 쓰는 분들도 있고
아닌 분들도 있을 것입니다만..

프로그래밍 언어도 나름 언어이다 보니
다양한 표현을 알아두면 최소한 이해하는 데에는 큰 도움이 됩니다.

사설은 이만 줄이고 람다를 어떻게 쓰는지 알아봅시다.

반응형

정의


람다 함수는 하나의 임의 함수입니다.
여러 Argument를 받아 수행하지만 하나의 표현으로만 가질 수 있습니다.


장점


함수를 간편하게 작성할 수 있다는 점이 람다 함수의 장점입니다. 다른 함수의 인수로 함수를 넣을 때, 람다를 주로 사용합니다.
C++ 에서의 함수 포인터와 비슷할 수 있겠네요.

인수로 넘긴다는 점에서 함수 포인터와 유사할 수는 있지만 차이점은 분명히 있습니다.



단점


굳이.. 단점이 있을까요?
제가 생각하는 단점은 함수만 만들어온 사람들에게는 그다지 직관적이지 않다? 정도인 것 같습니다.

그리고 이 부분은 단점이 아닌 특징인 부분인데요
람다 함수에는 변수의 사용이 불가하다는 점

이 정도는 참고해 주는 게 좋을 것 같습니다.


사용


그래서 람다를 어떻게 써야 할까요?
기본적으로 표현은 다음과 같이 사용합니다.

lambda Arguments : Expression


표현만 봐서는 뭐.. 어쩌라는건지
잘 모르겠습니다.

일단 하고싶은 것을 먼저 정의해 보겠습니다.
저는 함수 하나로 덧셈을 구현하고 싶었습니다.

def plus ( x, y ):
    return x + y

print( plus(1, 2) )


출력 결과는 불보듯 뻔하게 3이 나옵니다.

저는 이걸 람다로 바꿔주고 싶습니다.

# 221104 lambda

def plus ( x, y ):
    return x + y

print( plus(1, 2) )

lambda_plus = (lambda x, y: x + y )
print( lambda_plus( 2, 1 ))


lambda_plus 라는 변수에 람다함수를 할당하여 수행해 보았습니다.
위에 작성 된 코드의 출력은 다음과 같습니다.

3
3


네.. 이게 전부입니다.
람다는 이런식으로 사용하시면 됩니다.


So what..?


조금... 보수적이신 분들은
그냥 함수만들면 되지 뭘 ... 굳이 저렇게 변수에 할당해 가면서 쓰냐? 라고 하실 수 있겠습니다.

그런데 일부 함수에서 정말 유용하게 사용됩니다.

filter


필터 함수는 특정 조건에 해당하는 값들을 필터링 해주는 함수입니다.

filter(function, iterable)


filter 함수는 function과 iterable object를 argument로 받습니다.
Iterable은 이전에 한번 다뤘으니 참고하셔도 좋을 것 같습니다.

2022.11.03 - [CS/Python] - [python3] 파이썬에서 이터레이터 (Iterator) 란?

[python3] 파이썬에서 이터레이터 (Iterator) 란?

Iterator 우선 이터레이터라는 단어는 디자인 패턴에서 많이 듣는다. Iterator pattern Single Responsible Principle 을 준수하기 위해 데이터의 저장과 방문의 책임을 분리하여 방문의 책임만을 갖게 하는 패

armin.tistory.com



그럼 filter에 어떻게 lambda 를 적용할 수 있을지
아래 코드를 보면 쉽게 이해가 가능합니다.

r = filter ( lambda x : x > 5 , [ 1, 2, 3, 4, 5, 6, 7, 10, 11])
print ( list(r) )


결과는 대충 예상이 되실 겁니다.

[6, 7, 10, 11]


저는 필터를 정말 자주 사용하고 있는 것 같아서 대표적인 예시로 작성해 보았습니다.
람다 함수는 filter 외에도 map, reduce 함수에서도 많이 사용됩니다.

람다를 잘 이해하셨다면
어떤 방식으로 든 잘 사용하시리라 생각 됩니다.


wh