2024-10-02 22:26:23 发布
网友
我有以下装饰者的例子
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>
包装函数(内部函数)如何获得原始函数的参数?你知道吗
包装函数没有获取原始函数的参数。它可以(通常是)选择传递给原始函数的参数。你知道吗
当您执行myprint = makeitalic(myprint)时,名称myprint现在是指包装函数。它不再引用前面定义为myprint的函数。你知道吗
myprint = makeitalic(myprint)
myprint
因此,当您调用myprint('hii')时,您正在调用包装函数。原始函数还没有参数,因为它从未被调用过。你知道吗
myprint('hii')
在wrapped内部,调用f。这是原始函数,您传递它args[0],即'hii'。所以,现在调用原始函数。它获取包装函数的第一个参数,因为这是您选择传递它的参数。你知道吗
wrapped
f
args[0]
'hii'
fourtheye已经链接到了完整的解释,所以这里有可能回答您的问题的最简短的解释:(*args, **kwargs)表示传递给wrapped函数的所有参数。args是元组,kwargs是字典。所以当wrapped函数引用args[0]时,它意味着“传递的第一个参数。你知道吗
(*args, **kwargs)
args
kwargs
包装函数没有获取原始函数的参数。它可以(通常是)选择传递给原始函数的参数。你知道吗
当您执行
myprint = makeitalic(myprint)
时,名称myprint
现在是指包装函数。它不再引用前面定义为myprint
的函数。你知道吗因此,当您调用
myprint('hii')
时,您正在调用包装函数。原始函数还没有参数,因为它从未被调用过。你知道吗在
wrapped
内部,调用f
。这是原始函数,您传递它args[0]
,即'hii'
。所以,现在调用原始函数。它获取包装函数的第一个参数,因为这是您选择传递它的参数。你知道吗fourtheye已经链接到了完整的解释,所以这里有可能回答您的问题的最简短的解释:
(*args, **kwargs)
表示传递给wrapped
函数的所有参数。args
是元组,kwargs
是字典。所以当wrapped
函数引用args[0]
时,它意味着“传递的第一个参数。你知道吗相关问题 更多 >
编程相关推荐