我们知道 Pythoneval()
是邪恶的
http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
并且整个 StackOverflow 的线程都建议使用 SymPy 的evalf()
.
作为一个 Python 新手,我无法说服自己这evalf()
是安全的,因为我缺乏技能。谁能详细说明evalf()
(不同)是什么?
我们知道 Pythoneval()
是邪恶的
http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
并且整个 StackOverflow 的线程都建议使用 SymPy 的evalf()
.
作为一个 Python 新手,我无法说服自己这evalf()
是安全的,因为我缺乏技能。谁能详细说明evalf()
(不同)是什么?
eval
python和sympy之间没有什么共同点evalf
(后者用于计算sympy表达式树的数值,与解析无关,而eval
只是解析字符串并像代码一样评估它)。
另一方面,sympify
与 一样危险eval
,因为它实际上使用eval
.
使用了两种基本模式,sympify
将它们混合在同一个函数中可能是个坏主意:
sympify(some_object)
将返回更适合在 CAS 中使用的对象的表示,例如转换int(1)
为sympy.Integer(1)
sympify("some_text")
将几乎直接解析文本eval
(搜索从sympy.parsing
存在的导入sympify
并跟随它)。它更安全,因为有一些限制,但它并不安全。