개념

커링(currying)이란 다중 인수를 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 바꾸는 것을 말한다.

“위키백과 - Currying

예시 코드 1

# 다중 인수 함수
def function(num1, num2):
    return num1 + num2

# function()를 아래의 커링 함수 형태로 대체할 수 있다.

# 커링 형태로 단일 인자를 받는 함수열
def curry(num1):
    def function(num2):
        return num1 + num2
    return function
  • 커링 함수를 사용하면 재사용성이 향상됩니다. → 인자중 변하지 않는 고정값을 두고 자주 변하는 값만 새로 받아가며 활용할 수 있습니다.
  • 가독성을 높여줍니다.
  • Python에서 커링을 활용한 아주 좋은 데코레이터 라는 패턴이 있습니다.

예시 코드 2 - 데코레이터

함수의 반환된 결과와 경과된 시간이 출력되는 timer라는 이름의 데코레이터 패턴의 함수입니다.

from time import time
# 데코레이터 기능 사용시 signature와 docstring을 보존하기 위해서 사용하는 라이브러리
from functools import wraps

# 데코레이터
def timer(func):
    @wraps(func)
    # *args는 일반적인 형태의 인자가 입력 되었을 때, 값이 존재
    # **kwargs는 {key : value} 형태의 인자가 입력 되었을 때, 값이 존재
    # *args와 **kwargs는 func 함수로 입력된 인자를 전달하기 위해서 사용
    def wrapper(*args, **kwargs):
        start = time()
        result = func(*args, **kwargs)
        end = time()
        print(f'실행 결과 : {result} / 경과 시간 : {end - start}')
        return result
    return wrapper

# add 함수 위에 @timer를 작성하여 데코레이터를 설정
@timer
def add(num1, num2):
    return num1 + num2

@timer
def multiple(num1, num2):
    return num1 * num2

add(1, 2)
multiple(1, 2)

결과

add와 multiple 함수의 실행 결과와 경과 시간이 같이 출력되는 것을 확인할 수 있습니다.

Result