12

ドキュメントから引用:

cmp(x, y)

2つのオブジェクトxとyを比較し、結果に応じて整数を返します。戻り値は、の場合は負、の場合x < yはゼロ、の場合x == yは厳密に正になりますx > y

私は戻り値が常に-10であると仮定していまし1たが、ドキュメントには明示的には記載されておらず、ゼロと正/負の戻り値についてのみ言及されています。

の戻り値が、、、またはではない状況はありますcmp(x,y)か?-101

4

2 に答える 2

11

いいえ、ドキュメントには、yaluesは何でもかまいませんと明示的に記載されています。指定される唯一の値は0、比較されるオブジェクトが等しいかどうかです。値のみが表示されるという事実を信用しないでください。これは実装の詳細であり、変更される可能性があります*。したがって、常にと0を確認-10てください。1<>

cmp*:注-pyhton3で廃止されたため、実際には変更する機会はありません。代わりに豊富な比較を使用してください。

于 2012-05-17T11:46:22.157 に答える
2

list.sortのdocstringは興味深いものですが、信頼できるのは0だけです。

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

于 2012-05-17T12:04:21.087 に答える