使用字符串变量来调用python中的函数

时间:2018-01-12 12:29:20

标签: python string function

通过堆栈搜索但未找到我可以在我的代码中实现的答案 我有一个'机器'提供的字符串变量 - 没有用户输入 - 并且需要使用相同的名称调用函数。例如:

def add(x, y):
    return x + y

调用函数的代码:

num = function(x, y) ## where function is machine supplied string variable
                       (i.e. add, subtract, multiply, divide, etc.)

使用'raw'变量,函数,接收str对象不可调用。 如何在给定字符串输入的情况下调用fxn?

3 个答案:

答案 0 :(得分:0)

如果您的功能在同一个模块/脚本中,请使用dict:

def add(x, y):
    return x + y

# etc

OPERATORS = {
    'add': add,
    'substract': substract,
    # etc
    }

num = OPERATORS["add"](1, 2)

如果它们位于不同的模块中,您可以使用getattr()在模块上查找它们:

import operations    
num = getattr(operations, "add")(1, 2)

Bu dict方法仍然更安全,因为它明确地只允许函数的一部分。

答案 1 :(得分:0)

如果您想要完全安全,可以执行以下操作:

function_dispatcher = {'add': add, 'subtract': subtract, 'multiply', multiply, 'divide': divide}
try:
    to_call = function_dispatcher[function]
    num = to_call(x, y);
except KeyError:
    # Error code

答案 2 :(得分:-3)

您可以在eval(function(x,y))中使用eval,其中function是一个字符串。可能必须建立X和Y ......

command = function + "(" + x + "," + y + ")"
eval(command)