PHpullh

PYTHON · 함수형

함수 합성

여러 함수를 합성하여 새로운 함수를 만드는 함수형 프로그래밍 기법입니다.

함수형고급compose합성함수형functional

핵심 설명

여러 함수를 합성하여 새로운 함수를 만드는 함수형 프로그래밍 기법입니다.

Python code

from functools import reduce
from typing import Callable

def compose(*funcs: Callable) -> Callable:
    """오른쪽에서 왼쪽으로 함수 합성: (f ∘ g)(x) = f(g(x))"""
    def composed(x):
        return reduce(lambda v, f: f(v), reversed(funcs), x)
    return composed

# 개별 함수 정의
double = lambda x: x * 2
increment = lambda x: x + 1
square = lambda x: x ** 2
to_str = lambda x: f"결과: {x}"

# 합성
transform = compose(to_str, square, increment, double)
print(transform(3))  # 결과: 49  (3→6→7→49→"결과: 49")

# 리스트 처리 파이프라인
process_names = compose(
    ", ".join,
    sorted,
    lambda names: [n.title() for n in names],
    lambda names: [n.strip() for n in names],
)
names = ["  alice  ", "charlie", "  bob  "]
print(process_names(names))  # Alice, Bob, Charlie

# compose 데코레이터
def composable(func):
    func.then = lambda other: compose(other, func)
    return func

@composable
def add_one(x): return x + 1

result_func = add_one.then(lambda x: x * 3)
print(result_func(5))  # 18

학습 팁

compose는 수학적 합성 순서(오른쪽→왼쪽), pipe는 데이터 흐름 순서(왼쪽→오른쪽)입니다.

주의할 점

합성할 함수의 입출력 타입이 일치하지 않으면 런타임 에러가 발생합니다. 타입 힌트를 활용하세요.

자주 묻는 질문

함수 합성란 무엇인가요?

여러 함수를 합성하여 새로운 함수를 만드는 함수형 프로그래밍 기법입니다.

함수 합성 학습 시 주의할 점은 무엇인가요?

합성할 함수의 입출력 타입이 일치하지 않으면 런타임 에러가 발생합니다. 타입 힌트를 활용하세요.