12

引用自文档

cmp(x, y)

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

我假设返回值总是-1, 01但是文档没有明确说明,只提到零和正/负返回值。

是否存在返回值cmp(x,y)不是-1, 0, 或的情况1

4

2 回答 2

11

不,文档明确说 yalues 可以是任何东西。唯一指定的值是0比较对象是否相等。不要相信您只看到值和-1,这是一个实现细节并且可能会更改*,因此请始终检查和0。01<>

*:注意 - 实际上,它不会真的有机会改变,因为cmp在 pyhton3 中已经消失了。改为使用丰富的比较

于 2012-05-17T11:46:22.157 回答
2

只有 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正在愉快地使用 , 或 以外的值-10所以+1你也应该这样做!

于 2012-05-17T12:04:21.087 回答