【发布时间】:2013-06-03 02:21:56
【问题描述】:
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 作为来自上层范围的变量的访问。 但它怎么可能带来理论上的论据呢?
【问题讨论】:
-
我不明白你在问什么。你能改写一下这个问题吗?
-
闭包是它获取
f的方式,但与参数无关。它以与任何其他函数相同的方式获取它们——你调用它,你调用它的 args 作为它的参数传递。问题是原始函数f如何获取参数。在你的例子中,它_doesn't_——如果你想要它,你必须调用f(*args)。 (在您的情况下,因为它需要*args并且从不访问它们,所以您可以侥幸逃脱。) -
谢谢,但我在下面寻找答案
标签: python arguments closures decorator