【发布时间】:2011-11-10 13:02:39
【问题描述】:
在我的项目中,当我创建任何Add 或Mul 对象时,我必须使用evaluate=false。在这种情况下,当我对这些对象应用相等检查时,我会遇到问题。问题在于参数的顺序。
请考虑以下示例:
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。
有什么办法可以得到想要的结果吗?
此外,如果我对元组进行一些操作(例如颠倒顺序然后检查),则在 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]) 将是相同的,这是我不想要的。
【问题讨论】: