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