内部装饰函数如何查看decoratedfunction参数?

2024-06-07 17:11:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图攻克python的最后一个基本特性:decorators。我没有像处理列表比较那样摸索它,而且我不理解decorator声明中的内部函数是如何工作的。在

这是我的意思的一个例子。给出这个chunk-o-code:

def outer(func):
    def inner(*args, **kwargs):
        print('Hi my name is ')
        return func(*args, **kwargs)
    return inner

@outer
def decorated(name):
    print(name)


decorated('Bob')

我知道这会打印出来

^{pr2}$

但我不明白的是inner如何从decorated()获得任何{}或{}

我的理解是

@outer
def decorated(name):
    print(name)
decorated("Bob")

相当于outer(decorated("Bob"))。如果是这样,inner()如何访问name参数?撇开语法问题不谈,我希望inner的声明看起来像def inner(func.args, func.kwargs):

这是怎么回事?我误解了什么?在


Tags: namedecorators声明returndefargs特性kwargs
1条回答
网友
1楼 · 发布于 2024-06-07 17:11:10

My understanding is that

@outter
def decorated(name):
    print(name)
decorated("Bob")

is equivalent to outter(decorated("Bob")).

那是错误的。它相当于outter(decorated)("Bob")decorated替换为outer(decorated)(即inner)的返回值。当您调用decorated时,实际上是在调用inner。在

您可以交互检查:

>>> def outter(func):
...     def inner(*args, **kwargs):
...         print('Hi my name is ')
...         return func(*args, **kwargs)
...     return inner
...
>>> @outter
... def decorated(name):
...     print(name)
...
>>> decorated
<function outter.<locals>.inner at 0x7f5aec3461e0>

相关问题 更多 >

    热门问题