Действительно ли все не больше, чем Ни один? [дубликат]

Этот вопрос уже имеет ответ здесь:

Есть ли Python встроенный тип данных, кроме того None, для которого:

>>> not foo > None
True

где foo значение того типа? Как насчет Python 3?

65
задан Attila O. 6 February 2010 в 18:32
поделиться

2 ответа

Нет всегда меньше любого типа данных на Python 2 (см. object.c).

На Python 3 это было изменено; теперь сравнение вещей без разумного естественного упорядочения приводит к ошибке типа TypeError. С 3.0 "что нового":

Python 3. 0 упростил правила сравнения заказов:

Операторы сравнения заказов (<, <=, >=, >) вызывают исключение Ошибка типа, когда операнды не имеют осмысленного естественного порядка следования. Таким образом, выражения типа 1 < '', 0 > None или len <= len больше не действуют, и, например, None < None поднимает TypeError вместо того, чтобы возвращать False. Следствием этого является то, что сортировка разнородного списка больше не имеет смысла - все элементы должны быть сопоставимы друг с другом. Обратите внимание, что это не относится к операторам == и !=: объекты различных несопоставимых типов всегда сравниваются неравнозначно.

Это расстраивает некоторых, так как часто бывает удобно сделать что-то вроде сортировки списка, в котором есть некоторые None значения, и в начале или в конце появляются None значения, сгруппированные в начале или в конце. Некоторое время назад в списке рассылки был поток об этом , но конечная точка заключается в том, что Python 3 пытается избежать принятия произвольных решений о заказе (что часто происходило на Python 2).

80
ответ дан 24 November 2019 в 15:27
поделиться

Из источника на питоне 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: Добавлен номер версии.

29
ответ дан 24 November 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: