我有代码:
def my_decorator(target):
def wrapper():
print('Calling function "%s"' % target.__name__)
return target() # 1
return wrapper # 2
@my_decorator
def my_target(): # 3
print('Hi. I am the target.')
my_target()
我将无序地描述我对这种模式的理解。
#3 我们将函数my_target作为参数传递给装饰器my_decorator。没问题。
#1 实际上我们正在调用函数my_target。
#2(我的怀疑)。当我们在#1 中调用函数时,它会打印并返回,wrapper 'Hi. I am the target.'所以wrapper现在存储my_target函数的打印。然后,在#2wrapper()中调用来自函数的引用。所以在这个调用之后,wrapperreference 将运行print('..')set 本身的函数,并返回之前存储在其中的值('嗨。我是目标。',如开头所述)。那么,wrapper函数stores有两个值吗?