É tudo maior do que Nada? [duplicado]
-
19-09-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
Existe um Python built-in tipo de dados, além None
, para os quais:
>>> not foo > None
True
onde foo
é um valor desse tipo? Como sobre Python 3?
Solução
None
é sempre menor do que qualquer tipo de dados em Python 2 (ver object.c
).
Em Python 3, isso foi mudado; agora a fazer comparações sobre as coisas sem um sensatas resultados ordenação natural em um TypeError
. Desde o 3.0 "novidades" atualizações :
Python 3.0 simplificou as regras para comparações de ordenação:
Os operadores de comparação ordenação (
<
,<=
,>=
,>
) levantar uma exceçãoTypeError
quando os operandos não têm uma ordenação natural significativa. Assim, expressões como:1 < ''
,0 > None
oulen <= len
não são mais válidas, e por exemplo, raisesNone < None
TypeError
ao invés de retornarFalse
. Um corolário é que ordenar uma lista heterogênea não faz mais sentido - todos os elementos devem ser comparáveis ??entre si. Note que isto não se aplica aos operadores==
e!=
:. Objetos de diferentes tipos incomparáveis ??sempre comparar desigual entre si
Este chateado algumas pessoas, uma vez que muitas vezes era útil para fazer coisas como tipo uma lista que tinha alguns valores None
nele, e ter os valores None
aparecem agrupados no início ou no fim. Havia um fio na lista de discussão sobre este um tempo atrás, mas o ponto principal é que o Python 3 tentativas para evitar a tomada de decisões arbitrárias sobre a encomenda (que é o que aconteceu muito em Python 2).
Outras dicas
A partir do Python 2.7.5 fonte ( 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 da versão Adicionado