====== Python: Decorator ======
===== 함수 실행시간 측정 =====
from functools import wraps
def elapsed_time(func):
import time
@wraps(func)
def wrapped(*args, **kwargs):
start_time = time.perf_counter()
returns = func(*args, **kwargs)
end_time = time.perf_counter()
print('{} -> elased time: {:.3f}'.format(func.__name__, end_time - start_time))
return returns
return wrapped
@elapsed_time
def test_sleep(t):
import time
time.sleep(t)
return True
====== Logger wrapping ======
terminal 창의 마지막 줄에 elapsed time을 계속 표시함
def logger_info_with_state_bar(func):
global start_time
def wrapped(msg):
columns = os.get_terminal_size().columns
print(Fore.RESET + Back.RESET + ' ' * (columns - 1), end='\r')
func(msg)
status = 'elapsed time: {}'.format(time.time() - start_time)
if len(status) < (columns - 1):
status += ' ' * (columns - len(status) - 1)
print(Back.GREEN + Fore.BLACK + status + Fore.RESET + Back.RESET, end='\r')
return wrapped
logger.info = logger_info_with_state_bar(logger.info)
===== Decorator with parameters =====
def decorator_factory(argument):
def decorator(function):
def wrapper(*args, **kwargs):
funny_stuff()
something_with_argument(argument)
result = function(*args, **kwargs)
more_funny_stuff()
return result
return wrapper
return decorator
# https://stackoverflow.com/questions/5929107/decorators-with-parameters
===== 튜토리얼 =====
* http://www.hanbit.co.kr/network/category/category_view.html?cms_code=CMS5689111564