Decorators:参数是如何传递给包装函数的?

2024-10-02 22:26:23 发布

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

我有以下装饰者的例子

def makeitalic(f):
    def wrapped(*args, **kwargs):     
       return "<I>" + f(args[0]) + "</I>"
    return wrapped

def myprint(text):
    return text


myprint = makeitalic(myprint)
print myprint('hii')

Output:
<I>hii</I>

包装函数(内部函数)如何获得原始函数的参数?你知道吗


Tags: 函数textoutput参数returndefargs装饰
2条回答

包装函数没有获取原始函数的参数。它可以(通常是)选择传递给原始函数的参数。你知道吗

当您执行myprint = makeitalic(myprint)时,名称myprint现在是指包装函数。它不再引用前面定义为myprint的函数。你知道吗

因此,当您调用myprint('hii')时,您正在调用包装函数。原始函数还没有参数,因为它从未被调用过。你知道吗

wrapped内部,调用f。这是原始函数,您传递它args[0],即'hii'。所以,现在调用原始函数。它获取包装函数的第一个参数,因为这是您选择传递它的参数。你知道吗

fourtheye已经链接到了完整的解释,所以这里有可能回答您的问题的最简短的解释:(*args, **kwargs)表示传递给wrapped函数的所有参数。args是元组,kwargs是字典。所以当wrapped函数引用args[0]时,它意味着“传递的第一个参数。你知道吗

相关问题 更多 >