我正在使用 getattr 根据变量调用不同的函数。
我正在做类似的事情:
getattr(foo, bar) ()
这行得通,调用诸如 foo.bar() 之类的函数
我的问题是我有'bar'函数,我想用不同的参数调用它。例如:
def f1() :
pass
def f2(param1) :
pass
def f3(param1,param2) :
pass
所以“bar”可以是 f1、f2 或 f3
我试过这个: 假设 params 是一个列表,其中包含 'bar' 函数所需的所有参数
getattr(foo, bar) (for p in params :)
我正在寻找一个“干净”的解决方案,无需查看 params 变量的长度
最佳答案
你可以试试这样的:
getattr(foo, bar)(*params)
如果 params
是列表或元组,则此方法有效。 params
中的元素将按顺序解包:
params=(1, 2)
foo(*params)
相当于:
params=(1, 2)
foo(params[0], params[1])
如果有关键字参数,你也可以这样做。
getattr(foo, bar)(*params, **keyword_params)
其中 keyword_params
是字典。
另外,这个答案真的独立于 getattr
。它适用于任何函数/方法。
关于Python使用getattr调用带可变参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781265/