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?

War es hilfreich?

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 (<, <=, >=, >) eine TypeError Ausnahme auslösen, wenn die Operanden keine sinnvolle natürliche Ordnung haben. So Ausdrücke wie: 1 < '', 0 > None oder len <= len nicht mehr gültig sind, und z.B. None < None wirft TypeError statt False 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).

zu vermeiden versucht,

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top