rueki

Lambda, reduce, map, filter 본문

python

Lambda, reduce, map, filter

륵기 2021. 1. 5. 11:50
728x90
반응형

lambda 함수는 일회성 함수로써, 익명 함수라고도 한다. 메모리 영역을 사용 즉시 소멸하기 때문이며, Garbage collection이 0 이 된다.

일반 함수는 재사용성을 위해 메모리에 저장이 되는데 두 개의 차이점이라 하면 메모리 영역을 계속 사용하느냐 안하느냐의 차이라고 보면 된다.

 

예제 1번. lambda 함수 사용

cul = lambda a,b,c : a*b+c
print('Ex1 > ', cul(10,15,20))

# result -> 10*15+20

lambda로 매개변수 a,b,c를 이용해서 a*b+c라는 기능을 하는 함수를 생성하여 계산을 하였다.

 

예제 2번.  map 함수

map 함수의 사용은 어떠한 함수가 있을 때 변수 및 리스트에 적용시킬 때 사용하는 것이다.

두 가지 예를보고 비교해보자.

digits1 = [x * 10 for x in range(1,11)]
result = map(lambda i : i**2, digits1)
print(list(result))

위의 결과를 실행하면 1,4,9,16... 제곱의 결과로 반환받는다.

보통 map은 lambda와 같이 많이 사용하곤 하는데, 알고리즘 문제 풀 때 숫자 입력 받을 때, map(int, input().split()) 이런식으로도 사용하곤 한다.

 

lambda 함수를 사용하지 않고 def로 함수를 선언해서 만들어보자.

def also_square(nums):
    def double(x):
        return x ** 2
        
    return list(map(double,nums))

이전에 배운 중첩 함수 형태로 구현을 하였다. 이렇게보니 함수 가독성이 확 달라지는 느낌이 있는 것 같다.

map함수를 사용했을 때 list 변환을 해주지 않으면 map 객체가 반환되므로 해주자.

 

예제 3번. filter

filter는 말 뜻 그대로 거르는 역할을 해준다.

digits2 = [1,2,3,4,5,6,7,8]
print(list(filter(lambda x : x%2==0, digits2)))

#result -> 2,4,6,8

def also_evens(nums):
    def is_even(x):
        return x % 2 ==0
        
    return list(filter(is_even, nums))

 

예제 4번. reduce

reduce는 함수 실행의 최종 겨로가값으로 반환하며 보통 누적합 같은 것을 생각하면 될 것 같다.

from functools import reduce

digits3 = [x for x in range(1,101)]
result = reduce(lambda x,y : x+y, digits3)
print('Ex 4 >', result)


def also_add(nums):
    def add_plus(x,y):
        return x+y
    return reduce(add_plus, nums)
728x90
반응형

'python' 카테고리의 다른 글

파이썬 UnderScore  (0) 2021.01.07
Shallow Copy, Deep copy  (0) 2021.01.05
Variable Scope(변수 범위)  (0) 2021.01.01
OpenCV로 두 가지 영상 합성해서 이어붙이기  (0) 2020.12.02
Opencv tutorial(python) Template matching  (0) 2020.07.01
Comments