¿Por qué es ' > 0 Verdadero en Python?


En Python 2.6.4:

>> ''>0
True

¿Por qué es eso?

Author: parxier, 2010-03-05

2 answers

La motivación original del diseño para permitir comparaciones de orden de objetos arbitrarios era permitir la clasificación de listas heterogéneas us útilmente, eso pondría todas las cadenas una junto a la otra en orden alfabético, y todos los números uno al lado del otro en orden numérico, aunque cuál de los dos bloques vino primero no estaba garantizado por el lenguaje. Por ejemplo, esto permitió obtener solo elementos únicos en cualquier lista (incluso uno con elementos no hashables) en O(N log N) tiempo del peor caso

Sobre el años, este arreglo pragmático se erosionó. La primera grieta vino cuando la capacidad de ordenar-comparar números complejos fue quitada, hace bastantes versiones. De repente, la capacidad de ordenar cualquier lista desapareció: ya no se aplicaba si la lista contenía números complejos, posiblemente junto con elementos de otros tipos. Entonces Guido comenzó a disgustar las listas heterogéneas de manera más general, y por lo tanto comenzó a pensar que realmente no importaba si tales listas podían ser ordenadas útilmente o no... porque tales listas no deberían existir en primer lugar, según su nuevo pensamiento. No hizo nada para prohibirlos, pero tampoco se inclinó a aceptar ningún compromiso para apoyarlos.

Tenga en cuenta que ambos cambios mueven el equilibrio un poco lejos de la" practicidad supera la pureza " elemento del Zen de Python (que fue escrito anteriormente, cuando los números complejos todavía podría ser orden-comparado ;-) – un poco más pureza, un poco menos práctico.

Sin embargo, la capacidad de ordenar-comparar dos objetos arbitrarios (siempre y cuando ninguno fuera un número complejo ;-) se mantuvo durante mucho tiempo, porque alrededor de ese mismo tiempo Guido comenzó a insistir en mantener una fuerte compatibilidad hacia atrás (un cambio que es tanto práctico y puro ;-).

Por lo tanto, es solo en Python 3, que elimina explícita y deliberadamente la restricción de una fuerte compatibilidad hacia atrás para permitir algunos mejoras incompatibles hacia atrás (especialmente simplificaciones y eliminación de obsoleto, redundante manera de realizar ciertas tareas), que la comparación de orden de las instancias de diferentes tipos se convirtió en un error.

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

 74
Author: Alex Martelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-14 19:39:52

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

Tenga en cuenta que comparar objetos de diferentes tipos es legal. Desenlace es determinista pero arbitrario: los tipos están ordenados por su nombre. Por lo tanto, una lista es siempre más pequeña que una cadena, una cadena es siempre más pequeño que una tupla, etc. [1] Se comparan los tipos numéricos mixtos de acuerdo con su valor numérico, por lo que 0 es igual a 0.0, etc.

 21
Author: Dyno Fu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 13:35:21