Ответ 1
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).