SymPy的安慰是多么安全(<string>)。evalf()?</string>

时间:2013-05-23 15:59:05

标签: python eval string-parsing

我们知道Python的eval()是邪恶的

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

并且StackOverflow中的线程建议使用SymPy的evalf()

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

1 个答案:

答案 0 :(得分:7)

python eval和sympy evalf之间没有任何共同点(后者用于计算sympy表达式树的数值,并且没有与解析相关,虽然eval只是解析一个字符串并将其评估为代码而已。)

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

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

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

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