~/pingulee

파이썬 데코레이터 제대로 쓰기

pingulee조회 0 · 댓글 0

파이썬 데코레이터 제대로 쓰기

데코레이터는 함수를 받아 함수를 돌려주는 함수다.

import functools, time
 
def timed(fn):
    @functools.wraps(fn)
    def wrap(*a, **kw):
        t = time.perf_counter()
        r = fn(*a, **kw)
        print(f'{fn.__name__}: {time.perf_counter()-t:.4f}s')
        return r
    return wrap

functools.wraps를 잊지 말자

이걸 빼면 감싼 함수의 이름과 독스트링이 사라진다. 디버깅할 때 반드시 후회한다.

인자를 받는 데코레이터

데코레이터에 옵션을 주려면 한 겹을 더 감싼다. 처음엔 헷갈리지만 "함수를 돌려주는 함수를 돌려주는 함수"로 생각하면 풀린다.