¿Hay un pitón incorporada tipo de datos, además de None
, para lo cual:¿Hay algo más grande que ninguno?
>>> not foo > None
True
donde foo
es un valor de ese tipo? ¿Qué hay de Python 3?
¿Hay un pitón incorporada tipo de datos, además de None
, para lo cual:¿Hay algo más grande que ninguno?
>>> not foo > None
True
donde foo
es un valor de ese tipo? ¿Qué hay de Python 3?
None
es siempre menor que cualquier tipo de datos en Python 2 (consulte object.c
).
En Python 3, esto se cambió; ahora haciendo comparaciones en cosas sin un orden natural sensato resulta en un TypeError
. Desde el 3.0 "what's new" updates:
Python 3.0 ha simplificado las normas para las comparaciones Orden:
Los operadores de comparación de pedidos (
<
,<=
,>=
,>
) provocará una excepciónTypeError
cuando los operandos no tienen un orden natural significativo. Por lo tanto, expresiones como:1 < ''
,0 > None
olen <= len
ya no son válidas, y p.None < None
aumentaTypeError
en lugar de devolverFalse
. 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 desigualmente entre sí.
Esto molestó a algunas personas, ya que a menudo era útil para hacer cosas como ordenar una lista que tenía algunas None
valores en ella, y tienen los valores None
aparecen agrupados juntos al principio o al final. There was a thread on the mailing list about this hace un tiempo, pero el punto final es que Python 3 intenta evitar tomar decisiones arbitrarias sobre los pedidos (que es lo que sucedió mucho en Python 2).
Desde la fuente de Python 2.7.5 (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.
Esto es para Python 2.x supongo? – MatrixFrog
el enlace es 2.6 –
Gracias, esta es una respuesta muy clara! –
Gracias por aclarar el estado de Python 3. Recuerdo haber leído la página "lo nuevo" pero no recuerdo esta. Muy interesante, pero tiene sentido, de hecho ... –
Por supuesto, no hay nada arbitrario en ordenar Ninguno, siempre y cuando esté claramente definido. Este tipo de incompatibilidad gratuita es la razón por la que la adopción de Python 3 lleva tanto tiempo. –
"Bien definido" (definición clara y explícita de comportamiento) es distinto de "arbitrario" (una elección hecha en base a la discreción). Por ejemplo, uno podría haber dicho tan fácilmente "Ninguno se compara más que todo". Eso está igualmente bien definido, pero aún bastante arbitrario. –