给定一个字符串,例如
"2*(i+j) <= 100"
我想生成相应的lambda函数,
fn = lambda i,j: 2*(i+j) <= 100
我可以这样做eval
,但我正在寻找一种不那么邪恶的方法。
-
我已经发现
import ast
f = ast.Lambda('i,j', '2*(i+j) <= 100')
但我还没弄清楚如何执行结果!
理想情况下,我也想自动提取参数列表('i','j') - 现在,我只是使用 re.findall('\w+'),但我希望能够正确地使用现有功能,例如cos
而不是将它们隐藏为“关键字”。
我在看是否有用于处理复杂数学集(使用数学集构建器符号构建)的 Python 库? https://stackoverflow.com/questions/11110595/is-there-a-python-library-for-handling-complicated-mathematical-sets-constructe并尝试找出如何最好地将集合构建器符号解析为 lambda 以便提供给约束求解器。
我基本上希望 ast.literal_eval 也能识别变量。
理想情况下,给定i >= 20
我想回来((lambda x: x >= 20), ['i'])
然后我可以直接喂给constraint
.
您正在寻找替代方案eval
, 但为什么?你接受任意代码并执行它,所以为什么不使用eval
?避免的唯一理由eval
是因为它很危险,但你最终创建的 lambda 也同样危险。
另外,请记住,你确实无法确保在 CPython 中安全地执行此操作 http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)