2012-08-02 156 views
9

我正在使用getattr根据变量调用不同的函数。Python使用getattr调用具有可变参数的函数

Im做这样的事情:

getattr(foo, bar)() 

这样的作品,像调用foo.bar)功能(

我的问题是,我有“酒吧”功能,我想用不同的称呼它参数。例如:

def f1() : 
    pass 

def f2(param1) : 
    pass 

def f3(param1,param2) : 
    pass 

所以“酒吧”可能是F1,F2或F3

我尝试这样做: assumming是params为包含所需的“酒吧”功能的所有参数列表

getattr(foo, bar) (for p in params :) 

我看一个“干净”的解决方案,没有必要看是否存在params变量

回答

16

你可以尝试喜欢的东西长度:

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。它将适用于任何功能/方法。

+2

我知道OP没有特别要求,但我也会加上'** kwargs',这样他就不会在以后尝试使用关键字参数时很难追踪错误。 – 2012-08-02 15:56:05

+0

@ sr2222 - 已添加。 – mgilson 2012-08-02 16:00:42

相关问题