Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Hay un pitón tipo de datos incorporado, además None , para los que:

>>> not foo > None
True

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

¿Fue útil?

Solución

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

En Python 3, esto fue cambiado; ahora hacer comparaciones sobre las cosas sin un ordenamiento natural sensibles resultados en una TypeError. En la página 3.0 "Novedades" actualizaciones

  

Python 3.0 ha simplificado las reglas para ordenar las comparaciones:

     

Los operadores de comparación de pedidos (<, <=, >=, >) provocará 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 plantea TypeError en vez de volver 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 !=:. Objetos de diferentes tipos incomparables siempre comparan desiguales entre sí

Esto molestó a algunas personas, ya que a menudo era útil para hacer cosas como ordenar una lista que tenía algunos valores None en ella, y tienen los valores None aparecen agrupados juntos al principio o al final. Había un hilo en la lista de correo de este hace un tiempo, pero el punto final es que Python 3 intenta evitar tomar decisiones arbitrarias acerca de la adquisición (que es lo que ha pasado mucho en Python 2).

Otros consejos

Desde el 2.7.5 fuente Python ( 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 . Añadido número de versión

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