引自docs:
cmp(x, y)
比较两个对象x和y并根据结果返回一个整数。如果
x < y
,则返回值为负,如果x == y
,则返回值为零;如果x > y
,则返回值为正。
我假设返回值始终为-1
,0
和1
,但文档没有明确说明,只提及零和正/负返回值。
当cmp(x,y)
的返回值不是-1
,0
或1
时,是否存在任何情况?
答案 0 :(得分:11)
不,文档明确表示yalues可以是任何东西。如果比较的对象相等,则指定的唯一值是0
。不要相信您只看到值-1
,0
和1
,这是一个实施细节,可能会更改*,因此请务必检查<
和{ {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
正在使用-1
,0
或+1
以外的其他值,所以你也应该这样做!