我有代码:
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()
中调用来自函数的引用。所以在这个调用之后,wrapper
reference 将运行print('..')
set 本身的函数,并返回之前存储在其中的值('嗨。我是目标。',如开头所述)。那么,wrapper
函数stores
有两个值吗?