파이썬에서 함수에 추가 기능을 구현할 때 사용되는 decorator에 대해서 알아보자.
매개변수가 없는 함수의 데코레이터
def trace(func): # 기능을 추가할 함수를 매개변수로 받음
def wrapper(): # 호출할 함수를 감싸는 함수
print(func.__name__, "함수 시작")
func() # 매개변수로 받은 함수 호출
print(func.__name__, "함수 종료")
return wrapper
# 데코레이터
@trace
def hello():
print("hello, world!")
hello() # trace(hello)와 같은 역할
# 출력:
# hello 함수 시작
# hello, world!
# hello 함수 종료
매개변수가 있는 함수의 데코레이터
def trace(func):
def wrapper(a, b): # 호출할 함수의 매개변수와 똑같이 지정
r = func(a, b)
print(f"{func.__name__}(a={a}, b={b}) -> {r}")
return r
return wrapper
@trace
def add(a, b):
return a + b
print(add(10, 20))
# 출력:
# add(a=10, b=20) -> 30
# 30
매개변수가 있는 데코레이터
def power(x): # 데코레이터의 인자를 받는 함수로 한번 감싸준다.
def decorator(func):
def wrapper(a, b):
r = func(a, b)
return x**r
return wrapper
return decorator
# 데코레이터 power에 인자 2를 넘겨줌
@power(2)
def add(a, b):
return a + b
print(add(3, 4))
# 출력: 128
# 2**(3+4) = 128
'Backend > Python' 카테고리의 다른 글
[Python] Exception Handling (0) | 2023.03.08 |
---|---|
[Python] 모듈과 패키지 (0) | 2023.03.08 |
[Python] closure (0) | 2023.03.07 |
[Python] 파이썬 class의 특징 (0) | 2023.03.07 |
[Python] asterisk (0) | 2023.03.07 |