使用insp向Python中的函数传递参数

2024-06-08 20:02:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

下面的代码片段显示了我目前使用的简化版本,它工作正常,但不能处理多个参数的函数。为了避免这个问题,如果函数需要更多参数,我使用一个列表:

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新手,我看过文档和各种网站,只是找不到解决方案。我尝试过创建一个参数元组之类的方法,但这也行不通,因为它最终将整个元组作为一个参数传入。在

有没有更好的方法来解决这个问题,比如创建某种表示一组参数的对象并将其传递给函数?如有任何建议,我们将不胜感激!在


Tags: 对象函数字符串列表参数len字典result
2条回答

你应该去看看https://stackoverflow.com/a/3394898/1395668。在

你要找的魔法是*。将此应用于列表,它会将项解压到函数的参数字段中:

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

print myfunc(*a)

查看**查看dict的相同方法

这种混合结构有点奇怪:

inc = [func_name, arg1, arg2, ...]

有两个分开的信息不是更自然吗?在

^{pr2}$

你能做的

methods[func_name](*args)

(通常,我不会将函数名绑定到变量,但最好是函数本身。)

相关问题 更多 >