Eval function with parameters
我有三个功能:
1 2 3 4 5 6 | 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 |
我想用一个字符串来称呼他们:
1 2 | myString = 'function_2' eval(myString) |
但是我无法将参数传递给eval函数,以传递给自定义定义的
要从包含函数名称的变量中调用函数,可以使用
(有用的链接:SO:从字符串调用函数)
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
通常出于各种原因,您不想使用
评估真的很危险
SO:为什么应避免执行和评估?
SO:使用eval是一种不好的做法吗?
蒂姆,谢谢你
一切都必须以字符串格式进行,才能正常工作。
1 | eval(myString + '(arg_1, arg_2, arg_3, arg_4)') |