E 'tutto più grande di Nessuno? [duplicare]
-
19-09-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Esiste un tipo di dato Python built-in, oltre None
, per il quale:
>>> not foo > None
True
dove foo
è un valore di quel tipo? Che ne dite di Python 3?
Soluzione
None
è sempre inferiore rispetto a qualsiasi tipo di dato in Python 2 (vedi object.c
).
In Python 3, questo è stato cambiato; ora sta facendo i confronti sulle cose senza un sensibile risultati ordinamento naturale in un TypeError
. Dal 3.0 "Novità" aggiornamenti :
Python 3.0 ha semplificato le regole per ordinare i confronti:
Gli operatori di confronto ordinazione (
<
,<=
,>=
,>
) sollevare un'eccezioneTypeError
quando gli operandi non hanno un ordinamento naturale significativo. Così, espressioni come:1 < ''
,0 > None
olen <= len
non sono più validi, e per esempioNone < None
sollevaTypeError
invece di ritornareFalse
. Un corollario è che l'ordinamento di un elenco eterogeneo non ha più senso - tutti gli elementi devono essere confrontabili tra loro. Si noti che questo non si applica agli operatori==
e!=
:. Oggetti di tipo diverso incomparabili confrontano sempre disuguale gli uni agli altri
Questa sconvolto alcune persone da quando è stato spesso utile per fare le cose come sorta una lista che aveva alcuni valori None
in esso, e hanno i valori None
appaiono raggruppati insieme all'inizio o alla fine. C'era un filo sulla mailing list su questo un po 'indietro, ma il punto finale è che Python 3 cerca di evitare di prendere decisioni arbitrarie di ordinare (che è quello che è successo molto in Python 2).
Altri suggerimenti
Dal Python 2.7.5 sorgente ( 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;
...
}
Modifica :. Inserito il numero di versione