Python

[functools] reduce 함수

비번변경 2022. 7. 4. 22:16

functools

high-order-function을 위해 고안된 것으로 다름 함수에 적용하거나 다른 함수를 반환하는 모듈이다. 

 

💡 High-Order-Function (고차함수)
하나 이상의 함수를 인자로 받거나 함수를 결과로 반환하는 함수로, 쉽게 말해 함수를 다루는 함수라고 할 수 있다.
함수형 프로그래밍을 할 때 사용한다. HOF를 사용하면 유연하고 반복을 줄일 수 있는 코드를 작성할 수 있다. 

HOF

functools는 다음과 같은 함수를 제공한다.

  • Iru_cached
  • cmp_to_key
  • total_ordering
  • partial
  • reduce

이 글에서는 functools가 제공하는 함수는 reduce에 대해서 정리한다.

 

 

reduce()

여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해 사용한다.

functools.reduce(function, iterable[, initializer])

기본적으로 initializer를 기준으로 iterable 데이터를 순회하면서 function를 적용하여 데이터를 누적하는 방식으로 작동한다.

함수는 누적자와 현재 값에 해당하는 2개의 매개변수를 필요로 한다. 누적자는 함수 실행의 시작부터 끝까지 재사용되는 값이며, 현재 값은 루프를 돌면서 바뀌는 값이다.

 

 

예시

from functools import reduce

data = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x + y, data))

위의 예제는 아래와 같이 풀어쓸 수 있다.

((((1 + 2) + 3) + 4) +5)

 

 

Factorial

reduce를 이용하면 아래와 같은 방식으로 factorial 계산을 할 수 있다.

import functools

print(functools.reduce(lambda x, y: x * y, range(1, 6)))

 

 

참고 문서

Higher-Order Function 이란 무엇인가

https://velog.io/@hyeseong-dev/Python-Higher-order-Function

https://codedrive.tistory.com/455

https://technote.kr/344

https://www.daleseo.com/python-functools-reduce/