如何使用lambda函数调用'str'对象?

时间:2014-06-20 19:14:12

标签: python string lambda

我有一些预定义的功能,比如: addhost,edithost,deletehost。

现在基于收到的一些参数,我必须调用上述函数之一。 现在param的值与上述函数之一相同.param的类型是str。

例如:如果param是'addhost',那么我应该可以调用addhost()。 但是当我直接这样做时,它会给出错误'str' object is not callable 如何根据收到的param调用相应的函数?

P.S。我不想使用条件语,我只想使用lambda函数之类的东西。

3 个答案:

答案 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