파이썬 데코레이터 질문합니다.

조회수 344회

파이썬 교재를 사서 독학중인데

데코레이터를 이용해 함수 호출 시마다 인자 값과 반환 값을 출력하는 예제에서 막혔습니다.

from functools import wraps

def trace(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        print(f'{func.__name__}({args!r}, {kwargs})'
              f'-> {result!r}')
        return result
    return wrapper

@trace
def fibo(n):
    if n in (0, 1):
        return n
    return fibo(n-1) + fibo(n-2)

fibo(4)

교재에서는 wrapper함수가 fibo함수가 실행되기 전과 후에 모두 실행돼서 출력값으로

fibo((0,), {}) -> 0
wrapper((0,), {}) ->0
...

이런 식으로 fibo(4)를 구할때까지 fibo와 wrapper가 한번씩 출력되는데 제 코드로는 fibo만 주루룩 출력됩니다. 계속 검토해봐도 교재와 다르게 입력한 코드는 없는 것 같은데 뭘 잘못했는지 모르겠습니다. wrapper가 fibo 함수가 실행되기 전과 후에 실행된다는 이유와 그 의미도 잘 이해가 안갑니다..

감사합니다

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)