python python-3.x python-datamodel

subplot title python



¿Es todo más grande que ninguno? (2)

Esta pregunta ya tiene una respuesta aquí:

¿Hay un tipo de datos incorporado de Python, además de None , para el cual:

>>> not foo > None True

donde foo es un valor de ese tipo? ¿Qué hay de Python 3?


De la fuente de Python object.c ( object.c ):

static int default_3way_compare(PyObject *v, PyObject *w) { ... /* None is smaller than anything */ if (v == Py_None) return -1; if (w == Py_None) return 1; ... }

EDITAR : Número de versión agregado.


None es siempre menor que cualquier tipo de datos en Python 2 (ver object.c ).

En Python 3, esto fue cambiado; ahora haciendo comparaciones en cosas sin una ordenación natural sensata resulta en un TypeError . De las 3.0 actualizaciones de "novedades" :

Python 3.0 ha simplificado las reglas para ordenar comparaciones:

Los operadores de comparación de pedidos ( < , <= , >= , > ) TypeError una excepción TypeError cuando los operandos no tienen un orden natural significativo. Por lo tanto, expresiones como: 1 < '''' , 0 > None o len <= len ya no son válidas, y por ejemplo None < None aumenta TypeError lugar de devolver False . Un corolario es que ordenar una lista heterogénea ya no tiene sentido, todos los elementos deben ser comparables entre sí. Tenga en cuenta que esto no se aplica a los operadores == y != : Los objetos de diferentes tipos incomparables siempre se comparan desiguales entre sí.

Esto molestó a algunas personas, ya que a menudo resultaba útil hacer cosas como ordenar una lista que tenía algunos valores None y hacer que los valores None aparezcan agrupados al principio o al final. Hubo un hilo en la lista de correo sobre esto hace un tiempo, pero el punto final es que Python 3 intenta evitar tomar decisiones arbitrarias sobre ordenar (que es lo que sucedió mucho en Python 2).