Ist alles größer als keiner? [Duplikat]
-
19-09-2019 - |
Frage
Diese Frage bereits eine Antwort hier:
Gibt es eine Python integrierte Datentyp, neben None
, für die gilt:
>>> not foo > None
True
wo foo
ist ein Wert dieser Art? Wie wäre es Python 3?
Lösung
None
ist immer weniger als jeder Datentyp in Python 2 (siehe object.c
).
In Python 3 wurde dies geändert; Hat einige Zeit Vergleiche auf Dinge, ohne eine sinnvolle natürliche Ordnung führt zu einer TypeError
. Von der 3.0 "Was ist neu" Aktuelles
Python 3.0 hat die Regeln vereinfacht Vergleiche für die Bestellung:
Die Bestellvergleichsoperatoren (
<
,<=
,>=
,>
) eineTypeError
Ausnahme auslösen, wenn die Operanden keine sinnvolle natürliche Ordnung haben. So Ausdrücke wie:1 < ''
,0 > None
oderlen <= len
nicht mehr gültig sind, und z.B.None < None
wirftTypeError
stattFalse
zurückzukehren. Eine logische Folge ist, dass eine heterogene Liste Sortierung nicht mehr sinnvoll ist - alle Elemente miteinander vergleichbar sein müssen. Beachten Sie, dass dies gilt nicht für die==
und!=
Operatoren:. Objekte verschiedener Arten unvergleichbar immer ungleich vergleichen zueinander
Das verärgert einige Leute, da es oft sehr praktisch war, Dinge zu tun, wie Sortierung einer Liste, die in es einige None
Werte hatten, und haben die None
Werte zusammen am Anfang oder Ende gruppierten erscheinen. Es war ein Thread auf der Mailingliste über diese eine Weile zurück, aber der entscheidende Punkt ist, dass Python 3 willkürliche Entscheidungen über die Bestellung (was viel in Python passierte 2).
Andere Tipps
Von der Python 2.7.5 Quelle ( 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;
...
}
Bearbeiten :. Hinzugefügt Versionsnummer