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 를 @로 감싸서 호출하므로써 함수를 감싸게 된다. 최종적으로 위와 같이 호출된다.