reduce함수
# syntax
reduce(집계함수, 순회가능한데이터)
- functools 내장 모듈의 reduce()함수는 여러개의 데이터를 대상으로 주로 누적 집게를 내기 위해서 사용
- 집계함수에서는 두개의 인자를 사용, 첫번째는 인자는 누적자(accumulator), 두번째 인자는 현재값(current value)가 넘어온다
누적자(accumulator)는 함수 시작부터 끝까지 계속 재사용되는 값이고 현재값은 '순회가능한데이터' 에서 바뀌는 값
- 순회가능한데이터는 문자열, 리스트, 튜플... 등 시퀀스를 말한다
# reduce함수
from functools import reduce
def add_func(a,b):
return a + b
def mul_func(a,b):
return a * b
a_list = list(range(1,11))
print(reduce(add_func, a_list)) # 55
print(reduce(mul_func, a_list)) # 3628800
=============================================
lambda 함수
# syntax
labmda(인수들, 표현식)
- 단순한 1회용 함수를 만들고 싶을 때 사용
- 이름이 존재하지 않는함수
- 인수들은 없거나 1개이상일 때는 콤마(,)로 구분한다
print((lambda x,y : x + y)(10,10)) # 20
add_func = (lambda x,y : x + y)
print(add_func(10,10)) # 20
cf.
# 만약 전달 인수 갯수에 맞지 않는다면은 오류남!
TypeError: <lambda>() missing 1 required positional argument: 'y'
print((lambda x,y : x + y)(10))
=============================================
lambda 함수와 reduce 함수를 같이! 썼을 때 빛을 발한다
reduce(lambda acc, cur: acc + cur["age"], users, 0)
from functools import reduce
a_list = list(range(1,11))
print(reduce(lambda x,y:x+y, a_list))
print(reduce(lambda x,y: x*y, a_list))
====================================
예시2
# reduce함수를 이용하여 나이의 합을 구해보자!
from functools import reduce
users = [{'mail': 'gregorythomas@gmail.com', 'name': 'Brett Holland', 'sex': 'M', 'age': 73},
{'mail': 'hintoncynthia@hotmail.com', 'name': 'Madison Martinez', 'sex': 'F', 'age': 29},
{'mail': 'wwagner@gmail.com', 'name': 'Michael Jenkins', 'sex': 'M', 'age': 51},
{'mail': 'daniel79@gmail.com', 'name': 'Karen Rodriguez', 'sex': 'F', 'age': 32},
{'mail': 'ujackson@gmail.com', 'name': 'Amber Rhodes', 'sex': 'F', 'age': 42}]
# reduce(집계함수, 순회가능한데이터)
def sol(cal,users):
v = users["age"]
cal += v
return cal
print(reduce(sol,users,0)) # 227
print(reduce(lambda ans, k: ans + k["age"], users, 0)) # 227
==================================