Является ли все большим, чем Ничего?[дубликат]
-
19-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Существует ли встроенный в Python тип данных, кроме того None
, для которого:
>>> not foo > None
True
где foo
является ли значение такого типа?Как насчет Python 3?
Решение
None
всегда меньше любого типа данных в Python 2 (см. object.c
).
В Python 3 это было изменено;теперь выполнение сравнений с вещами без разумного естественного упорядочения приводит к TypeError
.Из Обновления 3.0 "что нового":
Python 3.0 упростил правила упорядочения сравнений:
Операторы упорядоченного сравнения (
<
,<=
,>=
,>
) поднятьTypeError
исключение, когда операнды не имеют осмысленного естественного порядка.Таким образом, выражения типа:1 < ''
,0 > None
илиlen <= len
больше не действительны, и, например,None < None
повышаетTypeError
вместо того, чтобы возвращатьсяFalse
.Следствием этого является то, что сортировка разнородного списка больше не имеет смысла – все элементы должны быть сопоставимы друг с другом.Обратите внимание, что это не относится к==
и!=
операторы:объекты разных несравнимых типов всегда сравниваются неравноценно друг с другом.
Это расстраивало некоторых людей, поскольку часто было удобно выполнять такие вещи, как сортировка списка, в котором было None
ценности в нем, и обладают None
значения отображаются сгруппированными вместе в начале или в конце. В списке рассылки была тема об этом некоторое время назад, но конечная точка заключается в том, что Python 3 пытается избежать принятия произвольных решений о порядке (что часто происходило в Python 2).
Другие советы
От Питона 2.7.5 источник (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;
...
}
Редактировать:Добавлен номер версии.