python - 如何在给定参数字典的情况下调用仅位置参数的函数?

标签 python signature pep570

之前我曾使用 Signature.bind(argument_dict) 将参数字典转换为具有 .argsBoundArguments 对象.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 的 native 方法吗?

最佳答案

我只能找到这样的东西,使用字典中的仅位置参数:

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)

关于python - 如何在给定参数字典的情况下调用仅位置参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64234526/

相关文章:

java - 如何通过反射找到所有具有特定参数的方法?

python - 仅位置参数与 python 3.7 的兼容性

python - 初学者 - 在程序中集成 optparse

python - 乘以 Numpy 矩阵的列时出现问题

python - 计算坐标列表(lat,lng)之间的地理距离

python - 如何在 python 中的用户定义函数中实现 "positional-only parameter"?

python - 如何添加一列 timedelta 并将其与另一列关联?

c# - 不使用BouncyCaSTLe的C#中的数字签名

java - Google Cloud Storage - 表单上传(POST OBJECT)、签名和策略问题