python - 使用检查将参数传递给Python中的函数

标签 python reflection introspection inspect

我有一个Python脚本,它创建了自己的函数的字典,我希望它通过使用YARP读取函数名称和参数来执行它们(不过,YARP的知识与这个问题无关)。

我创建了一个名为“inc”的字符串列表,其中由进入程序的值填充。第一项是函数名称,列表中的任何其他字符串都是参数。我创建了一个名为“methods”的字典,其中键是函数名称,值是对函数对象的引用(使用检查模块)。我将函数的返回值存储在变量“结果”中。

下面的代码片段显示了我迄今为止所使用的简化版本,它工作正常,但无法处理具有多个参数的函数。为了避免这个问题,如果函数需要更多参数,我会使用列表:

if len(inc) == 1:
    result = methods[inc[0]]()   # call method with 0 arguments

elif len(inc) == 2:
    result = methods[inc[0]](inc[1])    # call method passing a string

else:
    args = []
    result = methods(inc[0])(inc[1:])    # call method passing a list

理想情况下,我想改变这一点,以便我的函数可以有任意数量的参数,但我不知道如何做到这一点。我是 Python 新手,我查看了文档和各种网站 - 我只是找不到解决方案。我尝试过创建参数元组之类的方法,但这也不起作用,因为它最终将整个元组作为一个参数传递。

是否有更好的解决方案来解决这个问题,例如创建某种代表一组参数的对象并将其传递给函数?任何建议将不胜感激!

最佳答案

您应该查看https://stackoverflow.com/a/3394898/1395668 .

您正在寻找的魔法是*。将此应用到您的列表,它将项目解压到函数的参数字段中:

a = [ 1, 2, 3]
def myfunc(a, b, c):
    return a + b + c

print myfunc(*a)

查看 ** 以了解 dict 的相同方法

关于python - 使用检查将参数传递给Python中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520567/

相关文章:

javascript - 在 React Native 中嵌入 Python/C++ 代码?

python - asyncio后台线程: run function in main thread blocking

python - 如何控制Python格式字符串中科学计数法的准确格式?

css - 如何在 JavaScript/CSS 中简单地创建一个图像反射效果?

c# - 通过反射在另一个 Controller 中调用 WebApi 的另一个 Action ?

python - 如何在 Python 中使用 GExiv2 读取相机品牌和型号

python - 使用提供给构造函数的数据列表在数据帧构造函数中设置多索引

java - 指定接口(interface)的反射图

Haskell 宏创建一个从名称到某些表达式的 Map?

python - 为什么不是 dir(x) 中的所有名称都对属性访问有效?