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