Backend/Python

[Python] decorator

sangwonYoon 2023. 3. 7. 00:35

파이썬에서 함수에 추가 기능을 구현할 때 사용되는 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