Question

    

Cette question a déjà une réponse ici:

         

Yat-il un Python type de données intégré, en plus None , pour lesquels:

>>> not foo > None
True

foo est une valeur de ce type? Que diriez-vous Python 3?

Était-ce utile?

La solution

None est toujours inférieur à tout type de données en Python 2 (voir object.c ).

En Python 3, cela a été changé; maintenant faire des comparaisons sur des choses sans résultats sensibles de commande naturelle dans un TypeError. De 3.0 "Nouveautés" mises à jour :

  

Python 3.0 a simplifié les règles pour commander des comparaisons:

     

Les opérateurs de comparaison de commande (<, <=, >=, >) déclenche une exception TypeError lorsque les opérandes ne disposent pas d'un véritable ordre naturel. Ainsi, des expressions comme: 1 < '', 0 > None ou len <= len ne sont plus valables, et par exemple None < None soulève TypeError au lieu de retourner False. Un corollaire est que le tri d'une liste hétérogène n'a plus de sens - tous les éléments doivent être comparables entre eux. Notez que cela ne concerne pas les opérateurs de == et !=. Objets de différents types incomparable est toujours inégale à l'autre

bouleversé certaines personnes car il était souvent utile de faire des choses comme sorte une liste qui avait des valeurs de None en elle, et ont les valeurs de None apparaissent regroupés au début ou à la fin. Il y avait un fil sur la liste de diffusion de cette un certain temps, mais le point ultime est que Python 3 essaie d'éviter de prendre des décisions arbitraires sur la commande (ce qui est arrivé beaucoup en Python 2).

Autres conseils

De Python 2.7.5 source ( 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;
    ...
}

EDIT :. Numéro de version Ajouté

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top