将字符串列表转换为函数调用

时间:2016-05-17 10:46:17

标签: python python-3.x

我有一个表格的字符串列表:

['function1', 'function2']

我想将它们作为方法执行:

function1(myVar)
function2(myVar)

编程。

什么是'正确'的方式?

3 个答案:

答案 0 :(得分:3)

如果你真的需要使用函数名(字符串),最安全的办法是保留允许函数名到函数的映射,即:

allowed_functions = {
   "function1": function1,
   "function2": function2,
   # etc
   }

然后查找该映射:

def applyfunc(funcname, *args, **kw):
    func = allowed_func.get(funcname, None)
    if func is None:
        raise ValueError("func '%s' is not allowed" % funcname)
    return func(*args, **kw)

这与使用locals()方式更安全(并且更容易维护)的Nils Werner解决方案非常相似。

否则,请记住python函数是对象(正如您在上面的示例中所注意到的那样),所以如果你想要的只是一个函数列表,那么它就像它可以得到的那样简单:

funcs = [function1, function2)
for func in funcs:
    print func(myvar)

答案 1 :(得分:2)

public ActionResult BestuuurEdit(int id) { using (var db = new PlanToolEntities()) { Persoon persoon = db.Persoon.Find(id); if(persoon == null) { return HttpNotFound(); } return View(persoon); } } 在此上下文中返回所有局部变量的locals(),您的函数应该在其中。

dict

答案 2 :(得分:1)

如果您要调用的那些函数位于模块中,则可以通过getattr

访问它们
import your_module

method_names = ['function1', 'function2']

for name in method_names:
  func = gettattr(your_module, name)
  # invoke now
  func() # Pass in your arguments if needed.