Все больше никто? [дубликат]
этот вопрос уже есть ответ здесь:
- Несколько меньше, чем минус бесконечность в Python? 1 ответ
есть ли встроенный тип данных Python,кроме того None
для которых:
>>> not foo > None
True
здесь foo
является ли значение этого типа? Как насчет Python 3?
2 ответа:
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; ... }
EDIT добавлен номер версии.