【发布时间】:2019-03-15 02:27:05
【问题描述】:
我在装饰器上找到的所有教程都建议在包装函数的签名中使用 *args, **kwargs 来处理来自包装函数的参数。然而 kwargs 不起作用,而普通的 args 是:
from functools import wraps
def wrapper(a_thing):
@wraps(a_thing)
def do_thing(*args, **kwargs):
print('before')
print(kwargs)
value = a_thing(*args, **kwargs)
print("after", *args, **kwargs)
return value
return do_thing
@wrapper
def output(*args, **kwargs):
print('during', *args, **kwargs)
import pdb; pdb.set_trace()
这是我的交互式输出:
(Pdb) output(99, 100)
before
{}
during 99 100
after 99 100
(Pdb) output(arg1=99, arg2=100)
before
{'arg1': 99, 'arg2': 100}
*** TypeError: 'arg1' is an invalid keyword argument for this function
(Pdb)
这是许多此类教程之一的an example:
如果它不起作用,使用 **kwargs 有什么意义?我觉得我错过了什么。
【问题讨论】:
标签: python