rueki
Lambda, reduce, map, filter 본문
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