Python Decorator란?
파이썬 데코레이터란 함수를 수정하지 않고 추가 적인 기능을 더하고 싶을 때 주로 사용
아래 예제 코드를 수행하면 함수 호출 전이나 후에 기능이 동작하게 할 수 있다.
def trace(func): # 호출할 함수를 매개변수로 받음
def wrapper():
print(func.__name__, '함수 시작') # __name__으로 함수 이름 출력
func() # 매개변수로 받은 함수를 호출
print(func.__name__, '함수 끝')
return wrapper # wrapper 함수 반환
@trace # @데코레이터
def hello():
print('hello')
hello() # 함수를 그대로 호출
##출력 결과
hello 함수 시작
hello
hello 함수 끝
Django의 Query를 Profiling 하기 위해선 아래와 같은 예시도 가능하다.
from django.db import connection, reset_queries
import time
import functools
def query_debugger(func):
@functools.wraps(func)
def inner_func(*args, **kwargs):
reset_queries()
start_queries = len(connection.queries)
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
end_queries = len(connection.queries)
print(f"------------------------------------------------------")
print(f"Function : {func.__name__}")
print(f"Number of Queries : {end_queries - start_queries}")
print(f"Finished in : {(end - start):.6f}s")
print(f"------------------------------------------------------")
return result
return inner_func
'Python > Utils' 카테고리의 다른 글
[Python Utils] Python 매직메소드 (MagicMethod) 이해하기 (0) | 2022.10.14 |
---|---|
[Python Utils] Python 제너레이터 사용 (0) | 2022.08.25 |
[Python Utils] Python Type 어노테이션/힌트 (Typing, mypy) (0) | 2022.08.24 |
[Python Utils] 코드 컨벤션 (pylint, flake8, pre-commit, mypy) (0) | 2022.08.24 |
[Python Utils] Python 코드 정리 Tool (Black, isort) (0) | 2022.06.30 |