很抱歉,如果以前曾经问过这个问题,但我找不到要搜索的字样,这会给我一些我正在寻找的答案。
我正在编写一个包含辅助函数的脚本,而该函数又可以调用几个函数中的一个函数,这些函数都采用相同的参数。在这个辅助函数中,我最终得到了这个字符串:
if funcName="func1":
func1(p1, p2, p3)
elif funcName="func2":
func2(p1, p2, p3)
elif funcName="func3":
func3(p1, p2, p3)
...
我知道我可以使用另一个辅助函数来获取funcName字符串并将其分配给相应的函数,但是有更好的方法吗?我的大脑想要做的是:
funcName(p1, p2, p3)
这样我可以调用任意函数名称。有可能吗?
答案 0 :(得分:7)
是的,您可以使用dict
映射名称来执行功能:
funcs = dict(
func1=func1,
func2=func2,
func3=func3
)
funcs[funcName](p1, p2, p3)
答案 1 :(得分:1)
如果将函数放在像这样的对象中:
var funcs =
{
f1: function() {},
f2: function() {},
f3: function() {}
}
例如,你可以funcs['f1']()
。
答案 2 :(得分:1)
您可以在locals
或globals
词典中调用它们:
locals()[funcName](p1, p2, p3)
示例:
>>> a = lambda x: x+1
>>> locals()['a'](2)
3
如下所述,您可以检查它们是否符合预期:
if funcName in ["func1", "func2", "func3"]:
locals()[funcName](p1, p2, p3)