2012-05-17 19 views
12

citado del docs:valores de retorno 2.x Python para cmp

cmp(x, y)

comparar los dos objetos X e Y y devuelven un entero de acuerdo con el resultado. El valor de retorno es negativo si x < y, cero si x == y y estrictamente positivo si x > y.

estaba bajo el supuesto de que los valores de retorno son siempre -1, 0 y 1 pero los documentos no dicen explícitamente que, solamente mencionar cero y valor de retorno positivo/negativo.

¿Hay situaciones en las que el valor de retorno de cmp(x,y) no es -1, 0 o 1?

+7

Naturalmente, vale la pena señalar que el uso de 'cmp()' se desaconseja, ya que se va en Python 3.x. –

Respuesta

11

No, la documentación dice explícitamente que yalues ​​pueden ser cualquier cosa. El único valor que se especifica es 0 si los objetos comparados son iguales. No confía en el hecho de que sólo se ven los valores -1, 0 y 1, eso es un detalle de implementación y podría cambiar *, por lo que siempre comprobar si hay < y > 0.

*: Nota - En realidad, no lo hará Realmente tengo la oportunidad de cambiar, ya que cmp se ha ido en pyhton3. use rich comparison en su lugar.

2

Sólo 0 puede invocarse, aunque la cadena de documentación para list.sort es interesante:

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

Pero, en realidad, una especie en realidad no imponer esta en él es función de comparación como se puede ver aquí:

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] 

Sólo por interés, pero está claro que sort está trabajando felizmente con otros valores que -1, 0, o +1, por lo que debe ser demasiado!

+1

http://docs.python.org/library/functions.html#sorted dice que los builtins de tipo aceptan funciones cmp que pueden devolver +, 0 o - resultados. –

Cuestiones relacionadas