다음 코드의 호출 순서에 혼란 스럽습니다.파이썬 장식 자의 호출 순서를 이해하는 방법
#/usr/bin/python
def decorator_no_args(fn):
if not callable(fn):
raise TypeError
def wrapper():
return fn()
print "decorator_no_args"
return wrapper
@decorator_no_args
def foo_no_args():
print "foo_no_args"
def decorator_args(* args, **kargs):
def wrapper0(fn):
def wrapper1(*args, **kargs):
return fn(*args, **kargs)
return wrapper1
print "decorator_args"
return wrapper0
@decorator_args(1)
def foo_args(arg0):
print "foo_args"
if __name__ == "__main__":
foo_no_args()
출력은 다음과 같습니다 위에서 볼 수 있듯이
decorator_no_args
decorator_args
foo_no_args
기능 decorator_args()
가 호출되지 않습니다. 그러나 왜 기록됩니까?