Existe-t-il un type de données intégré à Python ? en plus de None
pour lequel :
>>> not foo > None
True
où foo
est une valeur de ce type ? Que pensez-vous de Python 3 ?
Existe-t-il un type de données intégré à Python ? en plus de None
pour lequel :
>>> not foo > None
True
où foo
est une valeur de ce type ? Que pensez-vous de Python 3 ?
None
est toujours inférieur à n'importe quel type de données en Python 2 (cf. object.c
).
Dans Python 3, cela a été modifié ; maintenant, faire des comparaisons sur des éléments sans ordre naturel raisonnable donne lieu à un problème de type TypeError
. De la 3.0 mises à jour "Quoi de neuf ? :
Python 3.0 a simplifié les règles d'ordonnancement des comparaisons :
Les opérateurs de comparaison d'ordre (
<
,<=
,>=
,>
) soulève unTypeError
exception lorsque les opérandes n'ont pas d'ordre naturel significatif. Ainsi, des expressions comme :1 < ''
,0 > None
oulen <= len
ne sont plus valables, et par exempleNone < None
soulèveTypeError
au lieu de renvoyerFalse
. 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 les uns aux autres. Notez que cela ne s'applique pas à la==
et!=
opérateurs : les objets de types différents incomparables se comparent toujours de manière inégale.
Cela a contrarié certaines personnes, car il était souvent pratique de faire des choses comme trier une liste qui avait des None
dans celui-ci, et avoir le None
apparaissent regroupées au début ou à la fin. Il y a eu un fil de discussion sur la liste de diffusion à ce sujet. Il y a quelque temps, mais le point essentiel est que Python 3 essaie d'éviter de prendre des décisions arbitraires concernant l'ordonnancement (ce qui était souvent le cas dans Python 2).
Merci de clarifier l'état de Python 3. Je me souviens avoir lu la page "what's new" mais je ne me souviens pas de celle-ci. Très intéressant, mais cela a du sens en effet...
Bien sûr, il n'y a rien d'arbitraire à ordonner Aucun, tant qu'il est clairement défini. Ce genre d'incompatibilité gratuite est la raison pour laquelle l'adoption de Python 3 prend autant de temps.
"Bien défini" (définition claire et explicite d'un comportement) est distinct de "arbitraire" (choix fait sur la base de la discrétion). Par exemple, on aurait pu tout aussi bien dire "Aucun ne se compare à tout". C'est tout aussi bien défini, mais encore très arbitraire.
Du 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 : Ajout du numéro de version.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.