Python

Python 문법 기초 20 - 함수 장식자(decorator)

코딩탕탕 2022. 10. 22. 16:36

 

함수 장식자 (decorator : @ - meta 기능이 있다)

장식자는 또 다른 함수를 감싼 함수이다.

주 함수가 호출되면 그의 반환값이 장식자에게 건네진다.

그러면 장식자는 포장된 함수로 교체하여 함수를 돌려준다.

 

def make2(fn):
    return lambda:'안녕 ' + fn()

def make1(fn):
    return lambda:'반가워 ' + fn()

def hello():
    return '홍길동'

hi = make2(make1(hello))
# hello의 리턴값을 make1에서 주소로 받고 거기서 다시 실행되서 make2로 주소를 리턴해준다.
# make2의 주소를 최종적으로 리턴해준다.
print(hi())
print()

@make2
@make1   # 함수 위에 @함수명을 입력하면 함수를 감싸게 된다.
def hello2():
    return '고길동'

print(hello2())



<console>
안녕 반가워 홍길동

안녕 반가워 고길동

주소값을 리턴하므로(클로저 사용) 주소를 건내받으며 최종적으로 hi라는 변수에 주소가 들어가고 그것을 호출하면 3개의 함수가 호출된다.

make1, make2 를 @로 감싸서 호출하므로써 함수를 감싸게 된다. 최종적으로 위와 같이 호출된다.