如何在给定参数字典的情况下调用具有仅位置参数的函数



以前我曾使用Signature.bind(argument_dict)将参数字典转换为BoundArguments对象,该对象具有可以传递给函数的.args.kwargs

def foo(a: str, b: str, c: str): ...

argument_dict= {"a": "A", "c": "C", "b": "B"}
import inspect
sig = inspect.signature(foo)
bound_arguments = sig.bind(**argument_dict)
foo(*bound_arguments.args, **bound_arguments.kwargs)

但是,当函数只有位置参数时,这似乎是不可能的。

def foo(a: str, /, b: str, *, c: str): ...

import inspect
sig = inspect.signature(foo)
argument_dict= {"a": "A", "b": "B", "c": "C"}
bound_arguments = sig.bind(**argument_dict) # Error: "a" is positional-only

在这种情况下,我如何以编程方式调用函数?

这是从参数字典构造BoundArguments的原生方法吗?

我只能找到这样的东西,消耗dict:中的仅位置参数

pos_only = [k for k, v in sig.parameters.items() if v.kind is inspect.Parameter.POSITIONAL_ONLY]
positionals = [argument_dict.pop(k) for k in pos_only]
bound_arguments = sig.bind(*positionals, **argument_dict)

相关内容

  • 没有找到相关文章

最新更新