问题描述
我写了以下代码:
simplification = parse_expr(str_expression,evaluate=True)
expression = parse_expr(str_expression,evaluate=False)
if expression == simplification:
msg = "Couldn't simplify!"
else:
msg = "Simplified:"
我认为,如果表达式无论是否被求值都相同,那一定意味着它已经尽可能地简化了。 但出于某种原因,为了
str_expression = "s+5"
我知道这个表达是错误的:
expression == simplification
有人知道为什么吗?我该如何解决这个问题?
提前致谢。
解决方法
虽然这两个表达式打印相同,但它们的内部表示不同,因为以不同的顺序存储 args。 doit
方法通常应该撤销 evaluate=False
的效果:
In [10]: expression
Out[10]: s + 5
In [11]: simplification
Out[11]: s + 5
In [12]: expression.args
Out[12]: (s,5)
In [13]: simplification.args
Out[13]: (5,s)
In [14]: expression.doit().args
Out[14]: (5,s)
In [15]: expression.doit() == simplification
Out[15]: True