functools는 잘 이용하면 코테나 인터뷰 뿐 아니라 실무에서도 많은 작업을 간편하게 할 수 있도록 도와준다.
구문: functools.reduce(function, iterable[, initializer])
역할: list와 같은 iterable의 값을 앞에서부터 하나씩 function에 넣어 계산하고, 그 결과를 다시 function의 입력값으로 넣어 계산하는 과정을 반복하여 최종적인 값을 돌려준다.
예1. 리스트에 있는 값을 누적해서 계산
import functools
functools.reduce(lambda x, y: x+y, [2,3,4,5], 1) # ((((1+2)+3)+4)+5)
예2. pandas Dataframe에 저장된 값을 통해 기하평균을 구함
data['returns_GA'] = functools.reduce(lambda x, y: x * y,
(data['returns'].shift(-i) + 1 for i in range(5))) ** (1/5) - 1
즉, 이것을
data['returns'].head(10)
Date
2003-12-08 0.000760
2003-12-09 -0.002446
2003-12-10 -0.005327
2003-12-11 -0.005525
2003-12-12 0.002821
2003-12-14 0.000000
2003-12-15 0.005711
2003-12-16 -0.000085
2003-12-17 0.006103
2003-12-18 -0.002696
Name: returns, dtype: float64
이렇게 만든 것임
data['returns_GA'].head(10)
Date
2003-12-08 -0.001949
2003-12-09 -0.002101
2003-12-10 -0.000474
2003-12-11 0.000577
2003-12-12 0.002906
2003-12-14 0.001801
2003-12-15 0.003319
2003-12-16 0.002177
2003-12-17 0.002647
2003-12-18 0.001411
Name: returns_GA, dtype: float64
정리: 원래 iterator를 func을 이용해서 줄여(reduce) 주는 도구(tools)이라고 기억하자. 함수가 인자로 들어가기 때문에 함수형 프로그래밍(functional programming)의 예시이다.
반응형
'IT in General > Python' 카테고리의 다른 글
Immutable vs mutable (0) | 2023.10.22 |
---|---|
Iterator와 Generator 사용방법 (0) | 2023.03.15 |
any와 all, 그리고 return (0) | 2022.03.25 |
데코레이터와 피보나치 (0) | 2022.03.03 |
itertools.islice, tee, groupby, product (0) | 2022.03.03 |