可以在Python中将输入字符串转换成可调用的函数对象吗?

时间:2019-01-31 04:05:59

标签: python string function

我希望能够采用一个描述Python函数的字符串并将其转换为一个函数对象,然后可以调用该对象。例如,

myString = "def add5(x):
   return x + 5"
myFunc = myString.toFunction() <-- something like this?
print myFunc(10)     <-- should print 15

我之所以能够做到这一点,是由于我在计算机课的理论基础上提出的一个问题,该问题是在SISO(字符串输入,字符串输出)的假设下进行的。特别是,我们正在研究无法解决的问题yesOnString(P,I),如果P(I)=“ yes”,则返回“ yes”,否则返回“ no”。因此,我希望能够以字符串形式作为参数传递一个函数P,然后将该函数转换为一个字符串,然后调用该函数。

1 个答案:

答案 0 :(得分:-2)

使用内置的Python exec() function,这是可能的。

myString = "def myFunc(x): return x + 5"
exec( myString )  # myFunc = myString.toFunction() <-- something like this?
print( myFunc(10) )  #   <-- should print 15

如果要保持相同的命名模式

myString = "def add5(x): return x + 5"
exec( myString )  # myFunc = myString.toFunction() <-- something like this?
myFunc = add5
print( myFunc(10) )  #   <-- should print 15

在安全方面:exec() 执行给定的字符串,任何给定的字符串。

import os.system
os.system("format C:")  # etc.

因此请务必小心使用方式。当然不是任何形式的用户输入。