<aside> 💡 파이썬에서 데코레이터는 다른 함수를 수정하지 않고 기능을 추가하거나 변경할 수 있는 강력한 도구입니다. 데코레이터는 함수를 인자로 받아 다른 함수를 반환하는 함수입니다.
</aside>
@ 심볼을 이용하여 다른 함수에 적용# 1.
def my_decorator(func):
# 2.
def wrapper():
print("함수 실행 전")
func() # 3.
print("함수 실행 후")
return wrapper #4.
@my_decorator # 5.
def say_hello():
print("안녕하세요!")
say_hello()
함수의 실행 시간 측정
import time
def timer(func):
def wrapper(*args, **kwargs): # 함수에 어떤 매개변수가 사용되는지 모르므로
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"⏲️ {func.__name__} 실행 시간: {end_time - start_time}초")
return result
return wrapper
@timer
def exp_func():
total = 0
for i in range(1, 10000000):
total += (i * i - i) / i
return total
exp_func()
함수 로깅
import functools
def logger(func):
# 함수의 매개변수들 사용
def wrapper(*args, **kwargs):
print(f"✏️ {func.__name__} 함수 호출 - 인자: {args}, {kwargs}")
return func(*args, **kwargs)
return wrapper
@logger
def arith(x, y, *, func):
return func(x, y)
arith(3, 4, func=lambda x, y: x + y)
arith(10, 20, func=lambda x, y: x * y)