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하고 읽기 쉽습니다. functools는 partial과 lru_cache 위주로 활용하세요.
주의할 점
lru_cache는 인자가 hashable해야 합니다. list나 dict를 인자로 받는 함수에는 사용할 수 없습니다.
자주 묻는 질문
functools — partial, reduce, cache란 무엇인가요?
functools 모듈로 함수형 프로그래밍 패턴을 구현합니다.
functools — partial, reduce, cache 학습 시 주의할 점은 무엇인가요?
lru_cache 는 인자가 hashable해야 합니다. list나 dict를 인자로 받는 함수에는 사용할 수 없습니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.