В 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
.
Ответы
Ответ 1
См. руководство:
Объекты разных типов, кроме разных числовых типов и разных типов строк, никогда не сравнивайте одинаковые; такие объекты упорядочиваются последовательно, но произвольно (так что сортировка гетерогенного массива дает согласованный результат).
и
Детализация реализации CPython: Объекты разных типов, кроме номеров, упорядочены по их именам типов; объекты того же типа, которые не поддерживают правильное сравнение, упорядочиваются по их адресу.
Ответ 2
Преднамеренно сделать операции, такие как сортировка и сравнение словаря, четко определены.
[ссылаясь на Справочник по языку]
Операторы <, > , ==, > =, < =, и!= сравнивают значения двух объекты. Объекты не должны иметь один и тот же тип. Если оба являются числами, они преобразуются в общий тип. В противном случае объекты разных типы всегда сравниваются неравномерно и упорядочиваются последовательно, но произвольны.
Ответ 3
Из документы:
Детализация реализации CPython: Объекты разных типов, кроме номеров, упорядочены по их именам типов; объекты того же типа, которые не поддерживают правильное сравнение, упорядочиваются по их адресу.
NoneType
сравнивается с меньшим, чем int
, поскольку сравнение, по-видимому, чувствительно к регистру.
>>> type(0)
<type 'int'>
>>> type(None)
<type 'NoneType'>
>>> 'NoneType' < 'int'
True