데코레이터 강의중 오류 질문
, flowithego 님이 작성42.2.1 가변 인수 함수 데코레이터 부분 강의 중에서
def wrapper(*args, **kwargs):
"wrapper 함수 안에서는 func를 호출해주는데 args는 리스트이고, kwargs는 딕셔너리이므로 func에 넣을 때는 언패킹하여 넣어줍니다." 라고 나와 있고 동영상 강의에서도 args는 리스트라고 나오는데 튜플이라고 전 강의에서 배운걸로 기억하고 다시 구글링으로 확인해봐도 튜플이라고 나오는데
잘못 표기된것인가요?
그리고 추가로 이것은 오류가 아니고 궁금해서 묻는 질문입니다.
(참고부분)데코레이터를 여러개 지정하기에서
def decorator1(func):
def wrapper():
print('decorator1')
func()
return wrapper
def decorator2(func):
def wrapper():
print('decorator2')
func()
return wrapper
@decorator1
@decorator2
def hello():
print('hello')
hello()
이에 대한 결과값이
decorator1
hello
decorator2
hello
가 아니라
decorator1
decorator2
hello
인지 궁금합니다. 왜 첫번째 데코레이터에서는 hello를 출력하지 않는건가요?
Re: 데코레이터 강의중 오류 질문
, 도장_ 관리자님이 작성문의하신 내용은 튜플이 맞습니다.
온라인에는 이에 맞게 내용을 수정했고, 종이책에는 다음 쇄에 반영될 예정입니다.
decorator1 안의 wrapper에서 func()는 hello를 호출하는 것이 아니라 decorator2 안의
wrapper를 호출하게 됩니다. 그리고 decorator2 안의 wrapper에서 func()가 hello를 호출합니다.
즉,
wrapper (decorator1) -> wrapper (decorator2) -> hello 순서입니다.
@decorator1
@decorator2
def hello():
print('hello')
@decorator2
def hello():
print('hello')
는
decorated_hello = decorator1(decorator2(hello))
decorated_hello()
decorated_hello()
를 축약한 것이기 때문에 hello를 한 번만 호출합니다. 코드상에서도 decorator2에만 hello를 넣는 것을 볼 수 있습니다.