我们知道 Python 的 eval()
是邪恶的
http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
整个 StackOverflow 的线程都建议使用 SymPy 的 evalf()
。
作为 Python 新手,我无法真正说服自己 evalf()
是安全的,因为我缺乏相关技能。谁能详细说明 evalf()
的作用(不同)?
最佳答案
python eval
和 sympy evalf
没有任何共同点(后者用于计算 sympy 表达式树的数值,它没有 与解析有关,而 eval
是关于解析字符串并将其作为代码进行评估)。
另一方面,sympify
和 eval
一样危险,因为它实际上使用了 eval
。
有两种使用 sympify
的基本模式,将它们混合在同一个函数中可能是个坏主意:
sympify(some_object)
将返回更适合在 CAS 中使用的对象表示,例如将int(1)
转换为sympy .整数(1)
sympify("some_text")
将几乎直接通过eval
解析文本(搜索来自sympy.parsing
的导入出现在sympify
中并遵循它)。它更安全,因为有一些限制,但它不安全。
关于python - SymPy 的 sympify(<string>).evalf() 有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16718644/