3

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 作为来自上层范围的变量的访问。但它怎么能在理论上提出它的论点呢?

4

1 回答 1

4

这:

@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.

于 2013-06-06T22:12:19.143 回答