42.3 매개변수가 있는 데코레이터가 여러개일 때
, Chloe Kim님이 작성안녕하세요. 42.3 유닛 공부 중 문의드립니다.
매개변수가 있는 데코레이터가 여러개일 때 실행 순서는 '위에서 아래로'가 아닌가요?
import functools def is_multiple(x): def real_decorator(func): @functools.wraps(func) # @functools.wraps에 func를 넣은 뒤 wrapper 함수 위에 지정 def wrapper(a, b): r = func(a, b) if r % x == 0: print('{0}의 반환값은 {1}의 배수입니다.'.format(func.__name__, x)) else: print('{0}의 반환값은 {1}의 배수가 아닙니다.'.format(func.__name__, x)) return r return wrapper return real_decorator @is_multiple(3) @is_multiple(7) def add(a, b): return a + b add(10, 20)
실행 결과
add의 반환값은 7의 배수가 아닙니다. add의 반환값은 3의 배수입니다.저는 전 유닛 강의에서 데코레이터가 여러개 있을 때 순서는 위에서 아래라고 말씀하시길래 위 코드의 실행 결과도
add의 반환값은 3의 배수입니다.
add의 반환값은 7의 배수가 아닙니다.
로 나올 줄 알았습니다. 제가 깨닫지 못한 부분이 무엇인지 궁금합니다.
Re: 42.3 매개변수가 있는 데코레이터가 여러개일 때
, 도장_ 관리자님이 작성상단 고정에 있는 사이트에서 소스 코드를 단계별로 실행하면
그림으로 각 단계를 살펴볼 수 있습니다.
직접 하나씩 실행하면서 확인해보는 게 도움이 될 겁니다.
로컬에서 스택 등을 직접 추적하면서 단계별로 실행하고 싶다면 Thonny를 사용하세요.