首页 > 解决方案 > 可以将输入字符串转换为 Python 中的可调用函数对象吗?

问题描述

我希望能够获取一个描述 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 以字符串形式作为参数传递,然后让函数将字符串转换为然后调用的函数。

标签: pythonstringfunction

解决方案


这可以通过 Python 内置的exec() 函数实现。

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.

所以要非常小心它的使用方式。当然不是任何类型的用户输入。


推荐阅读