python - 可以将输入字符串转换为 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 以字符串形式作为参数传递,然后让函数将字符串转换为然后调用的函数。
解决方案
这可以通过 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.
所以要非常小心它的使用方式。当然不是任何类型的用户输入。
推荐阅读
- c# - 如何制作不可为空的字符串
- c++ - 为什么我无法使用 QtCreator 显示两个窗口,即使它们具有相同的代码?
- javascript - Jquery 选择器返回未定义
- c - 扩展宏时数字中的小数点太多
- excel - 如何使用文本计算excel中的行数
- python - 是什么阻止 python 识别我的相对路径?
- python - 将 Matplotlib 绘图标题放在右边距
- java - Firestore 时间戳到 ArrayList
然后到日期 - python - Pandas df中每个用户的两个事件行之间的时间差
- ag-grid - Angular 8 中的 ag-grid:自动调整列大小不适用于客户端页面