Python装饰器中的包装器如何到达装饰函数参数? 例如:
def decorate(f):
def wrapped_function(*args):
print args
f()
return wrapped_function
@decorate
def my_function(*args):
print("Hello world")
my_function("a")
# output
('a',)
Hello world
所以,我知道wrapped_function是一个闭包, 因为它保留了对my_function的访问权限,作为来自较高范围的变量。 但它怎么能在理论上引出它的论点?
答案 0 :(得分:1)
此:
@decorate
def my_function(*args):
pass
基本上与此相同:
my_function = decorate(my_function)
因此,wrapped_function
会替换my_function
。
这意味着:
my_function("a")
实际上是这样做的:
wrapped_function("a")
所以你已经将参数交给了wrapped_function
。
您可以看到属性__name__
>>> my_function.__name__
'wrapped_function'
没有装饰__name__
将为my_function.