ドキュメントから引用:
cmp(x, y)2つのオブジェクトxとyを比較し、結果に応じて整数を返します。戻り値は、の場合は負、の場合
x < yはゼロ、の場合x == yは厳密に正になりますx > y。
私は戻り値が常に-1、0であると仮定していまし1たが、ドキュメントには明示的には記載されておらず、ゼロと正/負の戻り値についてのみ言及されています。
の戻り値が、、、またはではない状況はありますcmp(x,y)か?-101
ドキュメントから引用:
cmp(x, y)2つのオブジェクトxとyを比較し、結果に応じて整数を返します。戻り値は、の場合は負、の場合
x < yはゼロ、の場合x == yは厳密に正になりますx > y。
私は戻り値が常に-1、0であると仮定していまし1たが、ドキュメントには明示的には記載されておらず、ゼロと正/負の戻り値についてのみ言及されています。
の戻り値が、、、またはではない状況はありますcmp(x,y)か?-101
いいえ、ドキュメントには、yaluesは何でもかまいませんと明示的に記載されています。指定される唯一の値は0、比較されるオブジェクトが等しいかどうかです。値のみが表示されるという事実を信用しないでください。これは実装の詳細であり、変更される可能性があります*。したがって、常にと0を確認-1し0てください。1<>
cmp*:注-pyhton3で廃止されたため、実際には変更する機会はありません。代わりに豊富な比較を使用してください。
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