引用自文档:
cmp(x, y)
比较两个对象 x 和 y 并根据结果返回一个整数。返回值为负 if
x < y
,零 ifx == y
和严格正 ifx > y
。
我假设返回值总是-1
, 0
,1
但是文档没有明确说明,只提到零和正/负返回值。
是否存在返回值cmp(x,y)
不是-1
, 0
, 或的情况1
?
引用自文档:
cmp(x, y)
比较两个对象 x 和 y 并根据结果返回一个整数。返回值为负 if
x < y
,零 ifx == y
和严格正 ifx > y
。
我假设返回值总是-1
, 0
,1
但是文档没有明确说明,只提到零和正/负返回值。
是否存在返回值cmp(x,y)
不是-1
, 0
, 或的情况1
?
不,文档明确说 yalues 可以是任何东西。唯一指定的值是0
比较对象是否相等。不要相信您只看到值和-1
,这是一个实现细节并且可能会更改*,因此请始终检查和0。0
1
<
>
*:注意 - 实际上,它不会真的有机会改变,因为cmp
在 pyhton3 中已经消失了。改为使用丰富的比较。
只有 0 可以依赖,虽然文档字符串list.sort
很有趣:
print list.sort.__doc__
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
但实际上, sort 实际上并没有将其强加于它的比较函数,如下所示:
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
你也应该这样做!