파이썬 functools 라이브러리: reduce, partial 함수의 활용

파이썬 functools 라이브러리: reduce, partial 함수의 활용

파이썬의 표준 라이브러리 중 하나인 functools는 고차원 함수와 데코레이터를 위한 도구를 제공합니다. 이 글에서는 functools 라이브러리의 일부 주요 기능에 대해 알아보겠습니다.

functools 라이브러리의 주요 기능

1. reduce 함수

functools 라이브러리는 reduce 함수를 제공합니다. reduce 함수는 이터러블의 모든 요소를 순차적으로 주어진 함수에 적용하여 단일 결과를 생성합니다.


▼ reduce 함수 예제

from functools import reduce

numbers = [1, 2, 3, 4, 5]

# 일반 함수 사용
def multiply(a, b):
    return a * b

result1 = reduce(multiply, numbers)
print(result1)  # 출력: 120

# 람다 함수 사용
result2 = reduce(lambda x, y: x * y, numbers)
print(result2)  # 출력: 120

위 코드는 주어진 리스트의 모든 요소를 곱하는 예제입니다. reduce 함수는 람다 함수와 리스트를 받아서 리스트의 모든 요소를 람다 함수에 따라 누적해서 처리합니다. 결과적으로 1부터 5까지의 모든 숫자를 곱한 결과인 120을 출력합니다.

2. partial 함수

partial 함수는 기존의 함수에 일부 인자를 고정한 새로운 함수를 생성합니다. 이는 함수를 재사용하면서 특정 인자를 고정하고 싶을 때 유용합니다.


▼ partial 함수 예제

from functools import partial

# 일반 함수 사용
def multiply(x, y):
    return x * y

double1 = partial(multiply, 2)
print(double1(4))  # 출력: 8

# 람다 함수 사용
double2 = partial(lambda x, y: x * y, 2)
print(double2(4))  # 출력: 8

이 코드는 partial 함수를 사용하여 람다 함수를 부분적으로 적용합니다. 이때 람다 함수는 두 개의 인자를 받아 곱셈을 수행하며, partial 함수를 통해 이 람다 함수의 첫 번째 인자를 2로 고정합니다. 결과적으로 double 함수는 주어진 숫자를 2로 곱하는 역할을 하게 됩니다.


☞ 이처럼 functools 라이브러리는 고차원 함수와 데코레이터를 위한 다양한 도구를 제공합니다. 이 글에서는 reduce와 partial 함수에 대해서만 살펴보았지만, 이 외에도 lru_cache, total_ordering 등 다양한 데코레이터를 포함하고 있습니다. 이러한 도구들은 코드의 재사용성을 높이고, 가독성을 향상시키며, 코드의 복잡성을 줄이는 데 도움이 됩니다. 파이썬의 강력한 기능 중하나인 데코레이터와 함께 사용하면 더욱 강력한 도구가 될 수 있습니다.

참고 자료

파이썬 공식 문서: functools 라이브러리 (https://docs.python.org/ko/3/library/functools.html)

함께 보면 좋은 이전 게시글

위로 스크롤