如何使'str'对象可调用通过lambda函数?
我有一些预定义的函数,比如:addhost、edithost、deletehost。
现在根据收到的某个参数,我需要调用上述的某一个函数。这个参数的值和上面某个函数的名字是一样的。这个参数的类型是字符串(str)。
举个例子:如果参数是 'addhost',那么我应该能够调用 addhost() 函数。但是当我直接这样做时,会出现错误:'str' object is not callable
。我该如何根据收到的参数来调用相应的函数呢?
附注:我不想使用条件语句,只想用类似于 lambda 函数的方式。
3 个回答
-1
我更倾向于使用这里提到的 getattr
方法: https://stackoverflow.com/a/3071/3757019
1
我喜欢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')
1
简单调用 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