将 args kwargs 和默认值的任意组合解析为签名密钥
Parsing an arbitrary combination of args kwargs and defaults to signature keys
我正在尝试实现以下逻辑:
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.arrivillaga 参考:
通过一个小的调整来处理默认值,我得到了想要的行为:
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
我正在尝试实现以下逻辑:
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.arrivillaga 参考:
通过一个小的调整来处理默认值,我得到了想要的行为:
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