함수도 함수안에 중첩되어 선언될 수 있다. 중첩함수 혹은 내부 함수는 는 상위 부모 함수 안에서만 호출 가능.
예시
삼성전자주식을 사라는 계시를 유료회원에게만 알려주려고 한다.
def jackpot_information():
return "계시가 내려졌습니다. 삼성전자를 사세요!"
def paid_user():
return True
if 사용시
if paid_user():
jackpot_information()
깔끔해 보이지만 이 경우 jackpot_information 함수가 호출 될때 paid_user가 무조건 먼저 호출 되어야 하는데, 이 연결고리를 잊어먹을 확률이 있다는 것
이럴 경우
@is_paid_user
def jackpot_stock_information():
return "계시가 내려졌습니다. 삼성전자를 사세요!"
is_paid_user 함수가 골뱅이 마크 (@) 와 함께 달려있는것을 볼 수 있음!
Decorator로 장식할 수 있는 함수는 중첩 함수(nested function)을 리턴(return) 하는 함수만 가능
Decorator : chain of functions
func1 => func2 => fun3 => ... =>funcN
만일 다음 함수를 리턴하지 않고 다른 값을 리턴해버리면 그 다음 함수로 넘어가지 못하고 그냥 함수 실행이 종료됨. 따라서 decorator 함수는 그 다음 함수를 리턴해 주어야 한다.