Tout est-il plus grand que Aucun? [dupliquer]
-
19-09-2019 - |
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
où foo
est une valeur de ce type? Que diriez-vous Python 3?
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 exceptionTypeError
lorsque les opérandes ne disposent pas d'un véritable ordre naturel. Ainsi, des expressions comme:1 < ''
,0 > None
oulen <= len
ne sont plus valables, et par exempleNone < None
soulèveTypeError
au lieu de retournerFalse
. 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é