이 데코레이터 함수를 보면 중요한 부분이 누락된 것을 알 수 있다. 기존 함수 func의 인수가 보이지 않는다. func 함수에 인수가 있다면 래퍼 함수는 함수 func를 제대로 호출할 수 없게 된다.
해결책은 앞 절에서 소개한 *args와 **kwargs 기능을 포함하는 것이다. 완전한 데코레이터 예시를 살펴보자.
import time
def make_timer(func):
def wrapper(*args, **kwargs):
t1 = time.time()
ret_val = func(*args, **kwargs)
t2 = time.time()
print('소요 시간 :', t2 - t1)
return ret_val
return wrapper
신규 함수가 래퍼인 것을 기억하라. 임시로 wrapper로 명명한 래퍼 함수는 결국 func 대신 호출될 것이다. 이 래퍼 함수는 어떤 숫자의 인수나 키워드 인수를 취할 수 있게 된다. 기존 함수 func에 모든 인수를 전달해 보자. 다음과 같이 말이다.
ret_val = func(*args, **kwargs)