2024-05-19 20:27:31 发布
网友
我们知道Python的eval()是邪恶的
eval()
http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
StackOverflow中的线程建议使用SymPy的evalf()。在
evalf()
作为一个Python新手,我无法真正说服自己evalf()是安全的,因为我缺乏技能。有人能详细说明evalf()做了什么(不同)?在
python eval和sympy evalf之间没有任何共同之处(后者用于计算sympy表达式树的数值,它与解析无关,而eval则是对字符串进行分析并将其当作代码进行计算)。在
eval
evalf
另一方面,sympify和{}一样危险,因为它实际上使用eval。在
sympify
使用sympify的基本模式有两种,它们混合在同一个函数中可能是个坏主意:
sympify(some_object)将返回更适合在CAS中使用的对象的表示形式,例如将int(1)转换为sympy.Integer(1)
sympify(some_object)
int(1)
sympy.Integer(1)
sympify("some_text")几乎直接通过eval解析文本(搜索eval中存在的sympy.parsing的导入并跟随它)。因为有一些限制,所以比较安全,但它不安全。
sympify("some_text")
sympy.parsing
python
eval
和sympyevalf
之间没有任何共同之处(后者用于计算sympy表达式树的数值,它与解析无关,而eval
则是对字符串进行分析并将其当作代码进行计算)。在另一方面,}一样危险,因为它实际上使用
sympify
和{eval
。在使用
sympify
的基本模式有两种,它们混合在同一个函数中可能是个坏主意:sympify(some_object)
将返回更适合在CAS中使用的对象的表示形式,例如将int(1)
转换为sympy.Integer(1)
sympify("some_text")
几乎直接通过eval
解析文本(搜索eval
中存在的sympy.parsing
的导入并跟随它)。因为有一些限制,所以比较安全,但它不安全。相关问题 更多 >
编程相关推荐