사용자 도구

사이트 도구


python:decorator

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

튜토리얼

python/decorator.txt · 마지막으로 수정됨: 2024/03/23 02:42 저자 127.0.0.1