在python中获取装饰函数的参数

时间:2013-06-06 21:57:06

标签: python arguments closures decorator

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的访问权限,作为来自较高范围的变量。 但它怎么能在理论上引出它的论点?

1 个答案:

答案 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.