Подтвердить что ты не робот

В Python None оценивает меньше нуля?

В Python None оценивается меньше нуля?

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> None < 0
True
>>> None == 0
False
>>> None > 0
False
>>>

Ожидается ли это?

Я бы предположил, что None будет либо равен нулю (через принуждение типа), либо что все эти операторы вернут False.

4b9b3361

Ответ 1

См. руководство:

Объекты разных типов, кроме разных числовых типов и разных типов строк, никогда не сравнивайте одинаковые; такие объекты упорядочиваются последовательно, но произвольно (так что сортировка гетерогенного массива дает согласованный результат).

и

Детализация реализации CPython: Объекты разных типов, кроме номеров, упорядочены по их именам типов; объекты того же типа, которые не поддерживают правильное сравнение, упорядочиваются по их адресу.

Ответ 2

Преднамеренно сделать операции, такие как сортировка и сравнение словаря, четко определены.

[ссылаясь на Справочник по языку]

Операторы <, > , ==, > =, < =, и!= сравнивают значения двух объекты. Объекты не должны иметь один и тот же тип. Если оба являются числами, они преобразуются в общий тип. В противном случае объекты разных типы всегда сравниваются неравномерно и упорядочиваются последовательно, но произвольны.

Ответ 3

Из документы:

Детализация реализации CPython: Объекты разных типов, кроме номеров, упорядочены по их именам типов; объекты того же типа, которые не поддерживают правильное сравнение, упорядочиваются по их адресу.

NoneType сравнивается с меньшим, чем int, поскольку сравнение, по-видимому, чувствительно к регистру.

>>> type(0)
<type 'int'>
>>> type(None)
<type 'NoneType'>
>>> 'NoneType' < 'int'
True