[Python]데코레이터(Decorator)
파이썬의 데코레이터(Decorator)에 대해 알아보자
자바의 어노테이션(Annotation)과 형태가 같지만, 동작은 AOP와 유사하다.
# 데코레이터(Decorator) 실습
import time
def get_execute_time(func):
def check_execute_time(*args):
# 함수 시작 시각
start_time = time.perf_counter()
# 함수실행
result = func(*args)
# 함수 종료시각
end_time = time.perf_counter() - start_time
# 실행 함수명
name = func.__name__
# 함수 매개변수
arg_str = ', '.join(repr(arg) for arg in args)
print('[%0.05fs] %s(%s) -> %r' % (end_time, name, arg_str, result))
return result
return check_execute_time
# 데코레이터 미사용
def my_func1(n):
for i in range(n):
time.sleep(0.1)
return 'completed!!'
def my_func2(*numbers):
return sum(numbers)
ex1 = get_execute_time(my_func1)
ex2 = get_execute_time(my_func2)
print(ex1, ex1.__code__.co_freevars)
print(ex2, ex2.__code__.co_freevars)
print('-' * 40)
print(ex1(10))
print()
print(ex2(1, 2, 3, 4, 5))
'''
<function get_execute_time.<locals>.check_execute_time at 0x0000024F2BD345E0> ('func',)
<function get_execute_time.<locals>.check_execute_time at 0x0000024F2C04F760> ('func',)
----------------------------------------
[1.05514s] my_func1(10) -> 'completed!!'
completed!!
[0.00000s] my_func2(1, 2, 3, 4, 5) -> 15
15
'''
## 데코레이터 사용
@get_execute_time
def my_func3(n):
for i in range(n):
time.sleep(0.1)
return 'completed!!'
@get_execute_time
def my_func4(*numbers):
return sum(numbers)
print('-' * 40)
print(my_func3(10))
print()
print(my_func4(1, 2, 3, 4))
'''
----------------------------------------
[1.05755s] my_func3(10) -> 'completed!!'
completed!!
[0.00000s] my_func4(1, 2, 3, 4) -> 10
10
'''
최신 댓글