我有三个功能:
def function_1(arg_1, arg_1, arg_1, arg_1):
return sol_1
def function_2(arg_1, arg_2, arg_3, arg_4):
return sol_2
def function_3(arg_1, arg_2, arg_3, arg_4):
return sol_3
Run Code Online (Sandbox Code Playgroud)
我想用字符串调用它们:
myString = 'function_2'
eval(myString)
Run Code Online (Sandbox Code Playgroud)
但是我无法将参数传递给要传递给自定义定义的 eval 函数function_2
,因为它们不是同质的 ( np.array
, float
, float
, int
)。
谢谢蒂姆,
一切都必须是字符串格式,这行得通。
eval(myString + '(arg_1, arg_2, arg_3, arg_4)')
Run Code Online (Sandbox Code Playgroud)
要从包含函数名称的变量调用函数,可以使用locals
andglobals
函数。基本上,您将 的输出locals()
视为本地声明函数的字典,然后使用带逗号分隔参数的括号正常调用返回值。
(有用的链接:SO: Calling a function from a string)
例子:
def function_1 (a1, a2):
print 'func1: ', a1, a2
def function_2 (a1, a2):
print 'func2: ', a1, a2
f1 = 'function_1'
f2 = 'function_2'
locals()[f1](2, 3)
# func1: 23
locals()[f2]('foo', 'blah')
# func2: fooblah
Run Code Online (Sandbox Code Playgroud)
eval
由于各种原因,您通常不想使用该功能——其中之一是安全性。例如:如果您传递给的部分内容eval
来自用户输入,您能确定它们没有给您危险的值或做意想不到的事情吗?以下是一些讨论以下陷阱的链接eval
:
归档时间: |
|
查看次数: |
10740 次 |
最近记录: |