PHpullh
학습 라이브러리/Python/functools — partial, reduce, cache

PYTHON · 함수형

functools — partial, reduce, cache

functools 모듈로 함수형 프로그래밍 패턴을 구현합니다.

함수형중급functoolspartialreducelru_cachecache

핵심 설명

functools 모듈로 함수형 프로그래밍 패턴을 구현합니다.

Python code

from functools import partial, reduce, lru_cache, cache
from operator import add, mul

# partial — 인자 일부를 고정한 새 함수
def power(base, exp):
    return base ** exp

square = partial(power, exp=2)
cube   = partial(power, exp=3)
print(square(5))  # 25
print(cube(3))    # 27

# reduce — 누적 연산
numbers = [1, 2, 3, 4, 5]
total   = reduce(add, numbers)         # 15
product = reduce(mul, numbers)         # 120
maximum = reduce(lambda a, b: a if a > b else b, numbers)

# lru_cache — 메모이제이션 (최근 N개 캐시)
@lru_cache(maxsize=128)
def fib(n: int) -> int:
    if n < 2: return n
    return fib(n-1) + fib(n-2)

print(fib(50))               # 빠름
print(fib.cache_info())      # 캐시 통계

# cache (Python 3.9+) — maxsize 제한 없음
@cache
def factorial(n: int) -> int:
    return 1 if n == 0 else n * factorial(n-1)

# map / filter (제너레이터 반환)
doubled = list(map(lambda x: x*2, numbers))
evens   = list(filter(lambda x: x%2==0, numbers))

# 더 Pythonic한 방법
doubled = [x*2 for x in numbers]
evens   = [x for x in numbers if x%2==0]

학습 팁

Python에서는 map()/filter()보다 리스트 컴프리헨션이 더 Pythonic하고 읽기 쉽습니다. functoolspartiallru_cache 위주로 활용하세요.

주의할 점

lru_cache는 인자가 hashable해야 합니다. list나 dict를 인자로 받는 함수에는 사용할 수 없습니다.

자주 묻는 질문

functools — partial, reduce, cache란 무엇인가요?

functools 모듈로 함수형 프로그래밍 패턴을 구현합니다.

functools — partial, reduce, cache 학습 시 주의할 점은 무엇인가요?

lru_cache 는 인자가 hashable해야 합니다. list나 dict를 인자로 받는 함수에는 사용할 수 없습니다.