在我的项目中,我必须evaluate=false
在创建任何对象时Add
使用Mul
。在这种情况下,当我对这些对象应用相等检查时,我会遇到问题。问题在于参数的顺序。
请考虑以下示例:
k2=Mul(*[x,y,2],evaluate=False)
k1=Mul(*[x,2,y],evaluate=False)
print k1==k2
结果是false
原样和原样。因此,当比较检查元组是否相等时,它返回. 有什么办法可以得到想要的结果吗?k2.args
(x,y,2)
k1.args
(x,2,y)
false
另外,如果我对元组进行一些操作(例如颠倒顺序然后检查),则在由不同对象形成的情况下(例如 when =k1
和= )它会失败k2
Mul
k1.args
2*x,y
k2.args
2*y,x
我不能在这里使用排序,因为在这种情况下Add([x+y,z],evaluate=False)
,Add([x+z,y],evaluate=False)
它将是两个不同的表达式。此外,如果我使用evalaute=True
, 在这种情况下Add([x+y],x])
将Add([2*x+y])
是相同的,这是我不想要的。