Python 2.x返回cmp的值

时间:2012-05-17 11:37:53

标签: python python-2.x

引自docs

  

cmp(x, y)

     

比较两个对象x和y并根据结果返回一个整数。如果x < y,则返回值为负,如果x == y,则返回值为零;如果x > y,则返回值为正。

我假设返回值始终为-101,但文档没有明确说明,只提及零和正/负返回值。

cmp(x,y)的返回值不是-101时,是否存在任何情况?

2 个答案:

答案 0 :(得分:11)

不,文档明确表示yalues可以是任何东西。如果比较的对象相等,则指定的唯一值是0。不要相信您只看到值-101,这是一个实施细节,可能会更改*,因此请务必检查<和{ {1}} 0。

*:注意 - 实际上,它实际上没有机会改变,因为>已经在pyhton3中消失了。请改用rich comparison

答案 1 :(得分:2)

虽然list.sort的文档字符串很有趣,但只能依赖0:

print list.sort.__doc__
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1

但事实上,排序实际上并没有将它强加于它的比较函数,如下所示:

def mycmp(a, b):
    print "mycmp(): a - b = ", a - b
    return a - b

L = [50, 30, 20, 40, 70, 50]

>>> L.sort(cmp=mycmp)
mycmp(): a - b =  -20
mycmp(): a - b =  -10
mycmp(): a - b =  20
mycmp(): a - b =  10
mycmp(): a - b =  -10
mycmp(): a - b =  30
mycmp(): a - b =  20
mycmp(): a - b =  10
mycmp(): a - b =  -20
mycmp(): a - b =  0

>>> print L
[20, 30, 40, 50, 50, 70]

仅仅是为了感兴趣,但显然sort正在使用-10+1以外的其他值,所以你也应该这样做!