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?

Foi útil?

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ção TypeError quando os operandos não têm uma ordenação natural significativa. Assim, expressões como: 1 < '', 0 > None ou len <= len não são mais válidas, e por exemplo, raises None < None TypeError ao invés de retornar False. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top