반응형

[Python 데이터 분석] 파이썬 람다 ( Python lambda )

반응형


| 람다(lambda)란?


람다(lambda)는 익명함수를 지칭하는 용어입니다. 그렇다면 익명 함수란 무엇일까요? 함수지만 기존의 함수 선언 문법과 달리 함수를 명명하지 않고도 정의할 수 있는 함수입니다.


기존의 프로그래밍 패러다임에서는 함수에 꼭 이름을 명시해야 했습니다. 다음과 같이요.

def example_plus(a, b):
    return a + b

print(example_plus(4,2))
6
파이썬에서는 위 함수의 이름을 명시하지 않고도 다음과 같이 이름 없는 함수를 만들 수 있습니다.
lambda a, b : a + b
위의 식을 이용해 def 키워드를 쓰지 않아도 lambda로 만든 함수를 변수에 할당해 사용할 수 있습니다. 이것은 파이썬에서의 함수가 일급함수이기 때문에 가능한 것입니다.
example_plus = lambda a, b : a + b
print(example_plus(4,2))
6
| map, reduce, filter

파이썬의 람다 함수는 간단한 함수가 필요한 map, reduce, filter 등의 함수에서 주로 쓰여집니다. 람다 함수는 이러한 간단하고 일회성 용도로 사용되는 함수를 쓸 때 def 키워드를 이용한 불필요한 함수를 만들지 않고 보다 간결한 코드를 작성하는 데 큰 도움을 줍니다. 


또한 익명함수이기 때문에 한 번 쓰이고 다음 라인으로 넘어가면 힙(heap) 메모리 영역에서 제거되는 것도 큰 장점입니다. 


 아래는 map을 이용한 예제입니다. map은 파이썬 함수와 데이터를 입력값으로 받고 각 데이터에 함수를 대응시켜 그 값을 반환하는 역할을 합니다. 밑에서 주목할 표현식은 파이썬에서 쓰이는 독특한 if 구문입니다. 주의할 점은 이 구문은 반드시 else를 써줘야 합니다.

                                            (expression1) if [condition] else (expression2)

a = [1, 6, 2, 5, 2, 7, 2, 8, 9, 11, 5, 26]
result = list(map(lambda x : x**2, a))  # 제곱시키기
print(result)
result2 = list(map(lambda x : str(x) if x % 2 == 0 else x, a))   # 짝수인 것은 string 타입으로 cast 아니면 단순히 반환
print(result2)

b = [12, 16, 24, 5, 20, 27, 12, 8, 9, 110, 51, 26]
result3 = list(map(lambda x, y : x + y, a, b))  # 리스트 자료형 두 개 받아서 연산
print(result3)
[1, 36, 4, 25, 4, 49, 4, 64, 81, 121, 25, 676]
[1, '6', '2', 5, '2', 7, '2', '8', 9, 11, 5, '26']

[13, 22, 26, 10, 22, 34, 14, 16, 18, 121, 56, 52]
filter에 대해서 알아보겠습니다. filter는 boolean값을 리턴하는 함수를 받아 이 조건에 맞으면 데이터를 반환하고 그렇지 않으면 반환하지 않습니다.
a = [8, 4, 2, 5, 2,7, 9, 11, 26, 13]
result = list(filter(lambda x : x > 7 and x < 15, a))
print(result)
[8, 9, 11, 13]
reduce는 요소를 처음부터 순차적으로 순회하여 지정된 함수로 처리합니다. 참고로 reduce는 functools 모듈을 불러와야 사용가능 합니다.
from functools import reduce
t = [47, 11, 42, 13]
result = reduce(lambda x, y : x + y, t)
print(result)
113
reduce 함수의 작동 방식은 다음과 같습니다. 





 참고자료 : https://www.coursera.org/learn/python-data-analysis
              https://dojang.io/mod/page/view.php?id=1060






반응형

이 글을 공유하기

댓글

Designed by JB FACTORY