2012-07-19 10 views

Respuesta

12

Debido Python 2.x trató de hacer la comparación entre los objetos disponibles de diferentes tipos (aunque no tienen sentido).

Se fija en Python 3:

>>> object() > 0 
Traceback (most recent call last): 
    File "<pyshell#320>", line 1, in <module> 
    object() > 0 
TypeError: unorderable types: object() > int() 

El orden utilizado en Python 2.x:

None < Numbers < [Other types in alphabetical order] 

Los números son: int, bool y float pero no complex porque no pueden compararse

Asimismo, los objetos de las clases de estilo antiguo (llamado instance objetos) mantenerse entre None y Numbers por alguna extraña razón.

+2

Es cierto que, desde una perspectiva amplia, la comparación de diferentes tipos de objetos no tiene sentido, pero es bueno poder ordenar tipos heterogéneos y obtener un ordenamiento uniforme. –

+1

@JBernardo ¿Podría agregar un enlace a una sección relacionada en la documentación de Python2.x? – satoru

+1

@ Satoru.Logic Aquí está el [link] (http://docs.python.org/library/stdtypes.html#comparisons). Lea el cuadro "Detalle de implementación de CPython" – JBernardo

2

Es comparar la dirección de el objeto. Si conoce C/C++, esto es aritmética de puntero.

>>> object() < object() 
True 
>>> object() > object() 
False 

En el primer ejemplo, el primer objeto() pasa a ser asignada anteriormente en la memoria de la segunda, por lo tanto es 'menor que' el otro.

pesar de todo, usted no debería estar comparando punteros como esto de todos modos. :)

+0

Puede confirmarlo utilizando la función 'id' (http://docs.python.org/library/functions.html#id). es decir .: id (object()) devolverá un entero. Ese es el valor que se usa para comparar a cero. – stderr

+2

Hace eso para dos objetos del mismo tipo que no tienen una comparación definida, pero para objetos de diferentes tipos, la respuesta de JBernardo es correcta. –

Cuestiones relacionadas