Pregunta

En Python 2.6.4:

>> ''>0
True

¿Por qué es eso?

¿Fue útil?

Solución

La motivación del diseño original para permitir comparaciones de pedidos de objetos arbitrarios era permitir la clasificación de las listas heterogéneas - provechosamente, que pondría a todas las cuerdas al lado del otro en orden alfabético, y todos los números uno al lado del otro en orden numérico, a pesar de cuál de los dos bloques fue primero no estaba garantizada por el lenguaje. Por ejemplo, esto permitió conseguir artículos solamente es único en cualquier lista (incluso uno de los objetos que no hashable) en el tiempo O(N log N) peor de los casos

A través de los años, esta solución pragmática erosionado. La primera grieta se produjo cuando la capacidad de los números complejos de orden-compare fue quitado, hace ya bastantes versiones. De repente, la capacidad de ordenar cualquier lista desapareció: no se aplicaba más si la lista contiene números complejos, posiblemente junto con los objetos de otros tipos. Entonces Guido comenzó aversión listas heterogéneas en términos más generales, y así empecé a pensar que en realidad no materia si esas listas podrían ser ordenados o no útil ... porque dichas listas no deben existir en primer lugar, de acuerdo a su nueva forma de pensar. Él no hace nada para prohibir a ellos, pero no estaba dispuesto a aceptar ningún compromiso para apoyar a ellos tampoco.

Tenga en cuenta que tanto los cambios mueven la balanza un poco lejos de la "practicidad es mejor que la pureza" elemento del Zen de Python (que fue escrito antes, en la época números complejos todavía podría be orden compararon ;-) -. un poco más la pureza, un poco menos práctico

Sin embargo, la capacidad de fin-de comparar dos objetos arbitrarios (siempre y cuando no era un número complejo ;-) permanecido durante mucho tiempo, ya que alrededor de ese mismo tiempo Guido comenzó realmente insistir en mantener un fuerte compatibilidad hacia atrás (un cambio que de < strong> ambos práctica y pura; -).

Por lo tanto, es sólo en Python 3, que elimina de forma explícita y deliberadamente la restricción de la compatibilidad fuertes hacia atrás para permitir que algunas mejoras deseadas largo pero al revés incompatibles (especialmente simplificaciones y eliminación de forma obsoleta, redundante para realizar ciertas tareas), por este orden comparación de casos de diferentes tipos se convirtió en un error.

Así que este tratado histórico y filosófico es, básicamente, la única manera de realmente responder a su "por qué" ...! : -)

Otros consejos

https://docs.python.org/2.7/tutorial/ datastructures.html # id1

  

Tenga en cuenta que la comparación de objetos de diferentes tipos es legal. El resultado   es determinista, pero arbitraria: los tipos se ordenan por su nombre.   Por lo tanto, una lista es siempre menor que una cadena, una cadena es siempre   más pequeña que una tupla, etc. [1] tipos numéricos mezclados se comparan   de acuerdo con su valor numérico, por lo que 0 es igual a 0,0, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top