개념
커링(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 함수의 실행 결과와 경과 시간이 같이 출력되는 것을 확인할 수 있습니다.