Python中如何将其他函数的可选参数名作为入参实现动态调用
问题实现方案
核心原理
你需要的效果完全可以实现,核心依赖Python的**关键字参数解包语法,配合字符串类型的参数名传递即可完成。
原代码报错是因为直接传入标识符a时,Python会将其识别为普通变量去全局作用域查找,找不到就抛出未定义错误,因此我们只需要将参数名以字符串形式传入即可。
最简实现代码
def foo(a=1, b=2, c=3): return a + b + c def bar(variable: str): # 此处替换为你实际的用户输入获取逻辑 z = int(input("请输入数值:")) # 构造关键字参数字典,通过**解包传递给foo return foo(**{variable: z}) # 传入参数名的字符串形式即可 print(bar('a'))
执行上述代码时,**{'a': z}会被Python自动解析为a=z的关键字参数传递,完全符合你期望的调用效果。
可选:参数合法性校验
如果需要避免传入foo不存在的参数名导致报错,可以提前提取foo的参数列表做校验:
import inspect def foo(a=1, b=2, c=3): return a + b + c # 提前获取foo的所有合法参数名 FOO_PARAMS = set(inspect.signature(foo).parameters.keys()) def bar(variable: str): if variable not in FOO_PARAMS: raise ValueError(f"无效参数名:{variable},foo支持的参数为{list(FOO_PARAMS)}") z = int(input("请输入数值:")) return foo(**{variable: z}) print(bar('a'))
内容的提问来源于stack exchange,提问作者Lemming
相关产品推荐
相关产品推荐

