PHpullh
학습 라이브러리/Python/커링과 부분 적용

PYTHON · 함수형

커링과 부분 적용

커링(currying)으로 다인자 함수를 단일 인자 함수 체인으로 변환합니다.

함수형고급curry커링부분 적용함수형

핵심 설명

커링(currying)으로 다인자 함수를 단일 인자 함수 체인으로 변환합니다.

Python code

from functools import wraps
import inspect

def auto_curry(func):
    """자동 커링 데코레이터"""
    n = len(inspect.signature(func).parameters)
    @wraps(func)
    def curried(*args):
        if len(args) >= n:
            return func(*args[:n])
        def inner(*more):
            return curried(*args, *more)
        return inner
    return curried

@auto_curry
def add(a, b, c):
    return a + b + c

# 다양한 호출 방식
print(add(1, 2, 3))     # 6
print(add(1)(2)(3))     # 6
print(add(1, 2)(3))     # 6

# 부분 적용 활용
add10 = add(10)
add10_20 = add10(20)
print(add10_20(30))      # 60

# 실용적 예시
@auto_curry
def format_log(level, module, message):
    return f"[{level}] {module}: {message}"

error_log = format_log("ERROR")
auth_error = error_log("AUTH")
print(auth_error("인증 실패"))    # [ERROR] AUTH: 인증 실패
print(auth_error("세션 만료"))    # [ERROR] AUTH: 세션 만료

db_info = format_log("INFO", "DB")
print(db_info("연결 성공"))       # [INFO] DB: 연결 성공

학습 팁

커링은 로깅, 설정 주입 등 인자의 일부가 미리 결정되는 상황에서 유용합니다.

주의할 점

가변 인자(*args, **kwargs)를 사용하는 함수는 커링이 어렵습니다. 명시적 매개변수를 사용하세요.

자주 묻는 질문

커링과 부분 적용란 무엇인가요?

커링(currying)으로 다인자 함수를 단일 인자 함수 체인으로 변환합니다.

커링과 부분 적용 학습 시 주의할 점은 무엇인가요?

가변 인자(*args, **kwargs)를 사용하는 함수는 커링이 어렵습니다. 명시적 매개변수를 사용하세요.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.