将 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