正在分析参数kwargs和默认签名密钥的任意组合



我正在尝试实现以下逻辑:

def decorator(func):
def func_wrap(*args, **kwargs):
** parse inputs such that I get a dictionary where the keys are the function signature keywords and the values are the matching values **
** do some preprocess of inputs **
return func(**new_kwargs)

对我来说,这似乎是一个非常有用的用例,但我在网上找不到任何参考。有什么想法吗?

感谢

感谢@juanpa.arrivilaga引用:你能从函数、args和kwargs中确定变量将如何分配吗?

通过一个小的调整来处理默认值,我得到了想要的行为:

def decorator(func):
func_signature = inspect.signature(func)
def func_wrap(*args, **kwargs):
bound_arguments = func_signature.bind(*args, **kwargs)
bound_arguments.apply_defaults()
for k, v in bound_arguments.arguments.items():
if k in kwargs:
continue
kwargs[k] = v
** do some preprocess of kwargs **
return func(**kwargs)

或者以一种更可重复使用的形式,作为一种功能:

def parse_all_inputs_as_kwargs(func, args, kwargs):
bound_arguments = inspect.signature(func).bind(*args, **kwargs)
bound_arguments.apply_defaults()
for k, v in bound_arguments.arguments.items():
if k in kwargs:
continue
kwargs[k] = v
return kwargs

最新更新