8

我们知道 Pythoneval()是邪恶的

http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

并且整个 StackOverflow 的线程都建议使用 SymPy 的evalf().

作为一个 Python 新手,我无法说服自己这evalf()是安全的,因为我缺乏技能。谁能详细说明evalf()(不同)是什么?

4

1 回答 1

8

evalpython和sympy之间没有什么共同点evalf(后者用于计算sympy表达式树的数值,与解析无关,而eval只是解析字符串并像代码一样评估它)。

另一方面,sympify与 一样危险eval,因为它实际上使用eval.

使用了两种基本模式,sympify将它们混合在同一个函数中可能是个坏主意:

  • sympify(some_object)将返回更适合在 CAS 中使用的对象的表示,例如转换int(1)sympy.Integer(1)

  • sympify("some_text")将几乎直接解析文本eval(搜索从sympy.parsing存在的导入sympify并跟随它)。它更安全,因为有一些限制,但它并不安全

于 2013-05-24T10:01:05.043 回答