Python/공통이론

Python - 데코레이터

zeroup 2023. 4. 12. 21:18

- 기존 함수가 그대로 동작하면서 추가 문장이 더 실행되는 wrapper 함수
 

>>> 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
>>> 
>>> # 원본함수
>>> def count_nums(n) :
>>>     for i in range(n) :
>>>         for j in range(1000) :
>>>             pass
>>> 
>>> # 함수 wrapping
>>> count_nums = make_timer(count_nums)

- 이제 원본함수(count_nums)를 호출할 경우 소요시간이 출력되는 동작이 추가된다.

- 함수 선언시 키워드를 추가하면 따로 함수 wrapping을 하지 않아도 된다.

>>> @make_timer
>>> def count_nums(n) :
>>>     for i in range(n) :
>>>         for j in range(1000) :
>>>             pass