我有一些预定义的功能,比如: addhost,edithost,deletehost。
现在基于收到的一些参数,我必须调用上述函数之一。 现在param的值与上述函数之一相同.param的类型是str。
例如:如果param是'addhost',那么我应该可以调用addhost()。
但是当我直接这样做时,它会给出错误'str' object is not callable
如何根据收到的param调用相应的函数?
P.S。我不想使用条件语,我只想使用lambda函数之类的东西。
答案 0 :(得分:0)
简单致电eval
:
>>> def addhost():
... print "Add host"
...
>>> def edithost():
... print "Edit host"
...
>>> def callstr(str):
... f = eval(str)
... f()
...
>>> callstr("addhost")
Add host
>>> callstr("edithost")
Edit host
>>>
如果你想使用lambda:
>>> callstr2 = lambda x:eval(x)()
>>> callstr2("edithost")
Edit host
>>> callstr2("addhost")
Add host
答案 1 :(得分:0)
我喜欢jonrsharpe的想法并且之前使用过它。代码很简单:
如果你想优化一下,可以在callit之外创建函数字典。
def fun1():
return 1
def fun2():
return 2
def nofun():
raise ValueError('Unknown function')
def callit(funname):
d = dict(fun1=fun1, fun2=fun2)
fun = d.get(funname, nofun)
return fun()
callit('fun1')
callit('badbadbad')
答案 2 :(得分:-1)
我会倾向于此处所述的getattr
方法:https://stackoverflow.com/a/3071/3757019