2012-05-17 7 views
12

vom docs zitiert:Python 2.x Rückgabewerte für cmp

cmp(x, y)

Vergleichen die beiden Objekte x und y eine ganze Zahl und zurück nach dem Ergebnis. Der Rückgabewert ist negativ, wenn x < y, null wenn x == y und streng positiv, wenn x > y.

Ich war unter der Annahme, dass die Rückgabewerte sind immer -1, 0 und 1 aber die docs, dass nicht explizit sagen, nur Null und positiven/negativen Rückgabewert zu erwähnen.

Gibt es Situationen, wenn der Rückgabewert von cmp(x,y) nicht -1 ist, 0 oder 1?

+7

Es ist natürlich erwähnenswert, dass die Verwendung von 'cmp()' abgeraten wird, da es in Python 3.x verschwunden ist. –

Antwort

11

Nein, die Dokumente sagen ausdrücklich, dass yalues ​​alles sein kann. Der einzige Wert, der angegeben wird, ist 0, wenn die verglichenen Objekte gleich sind. nicht nur über die Tatsache vertrauen, dass Sie die Werte -1, 0 und 1 sehen, dass eine Implementierung Detail ist und * ändern könnte, also immer überprüfen für < und > 0.

*: note - tatsächlich, wird es nicht wirklich eine Chance zu ändern, seit cmp in pyhton3 weggegangen ist. Verwenden Sie stattdessen rich comparison.

2

Nur 0 kann geltend gemacht werden, auch wenn das docstring für list.sort ist interessant:

print list.sort.__doc__ 
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; 
cmp(x, y) -> -1, 0, 1 

Aber in der Tat, Art eigentlich nicht verhängen dies auf es Vergleichsfunktion wie hier zu sehen:

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] 

Just for Interesse, aber deutlich sort arbeiten gerne mit anderen Werten als -1, 0 oder +1, so dass Sie auch sein sollen!

+1

http://docs.python.org/library/functions.html#sorted sagt, dass die Sortier-Builtins CMP-Funktionen akzeptieren, die +, 0 oder - Ergebnisse zurückgeben können. –

Verwandte Themen