对于两个物体a
和b
,__cmp__
要求 之一 a < b
,a == b
和a > b
是真实的。但是,这可能并非如此:考虑套,它是非常普遍, 这些都不 是真实的,例如{1, 2, 3}
VS {4, 5, 6}
。
于是__lt__
和朋友介绍了。但这给Python留下了两种单独的排序机制,这有点荒谬,因此在Python 3中删除了灵活性较差的一种。
您实际上不必实现所有六个比较方法。您可以使用@total_ordering
装饰器,仅实现__lt__
和__eq__
。
编辑:还请注意,在排序的情况下,key
函数可能比cmp
:效率更高:在您给出的示例中,Python可能必须调用Python比较函数O(n²)次。但是一个key
函数只需要调用O(n)次,并且如果返回值是内置类型(通常是这样),则O(n²)成对比较将通过C。