在我的项目中,我必须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和= )它会失败k2Mulk1.args2*x,yk2.args2*y,x
我不能在这里使用排序,因为在这种情况下Add([x+y,z],evaluate=False),Add([x+z,y],evaluate=False)它将是两个不同的表达式。此外,如果我使用evalaute=True, 在这种情况下Add([x+y],x])将Add([2*x+y])是相同的,这是我不想要的。