我可以有条件地改变我正在呼叫的功能吗?

时间:2015-12-14 18:34:54

标签: python

很抱歉,如果以前曾经问过这个问题,但我找不到要搜索的字样,这会给我一些我正在寻找的答案。

我正在编写一个包含辅助函数的脚本,而该函数又可以调用几个函数中的一个函数,这些函数都采用相同的参数。在这个辅助函数中,我最终得到了这个字符串:

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)

这样我可以调用任意函数名称。有可能吗?

3 个答案:

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

您可以在localsglobals词典中调用它们:

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)