Как писал jamylak, None
просто не печатается снарядами Python.
Это удобно, потому что все функции возвращают что-то: если не указано никакого значения, они возвращаются None
:
>>> def f():
... print "Hello"
...
>>> f()
Hello
>>> print f() # f() returns None!
Hello
None
Вот почему Python оболочки не печатать вернулся None значение. print None
отличается, однако, поскольку он явно запрашивает Python для печати значения None
.
Что касается сравнений, None
является не считается -infinity.
general rule для Python 2 состоит в том, что объекты, которые нельзя сравнивать каким-либо значимым образом, не вызывают исключения при сравнении, а вместо этого возвращают некоторый произвольный результат. В случае CPython, произвольное правило заключается в следующем:
Объекты различных типов, кроме чисел упорядочены по именам типа ; объекты тех же типов, которые не поддерживают надлежащее сравнение заказываются по их адресу.
Python 3 вызывает исключение, для не-значимых сравнений как 1 > None
и сравнение сделано через max(1, None)
.
Если вам нужна -Infinity, Python предлагает float('-inf')
.
Итак, почему max (None, 1) return 1? это произвольно? – mclafee
Обратите внимание, что это правило применимо только к Python 2. В Python 3 он исправлен, и вы получаете осмысленное сообщение об ошибке 'unorderable types: int()
jamylak
@mclafee: 'max (None, 1)' действительно не определено. Правило «порядок по типу» для CPython 2, которое я цитировал, похоже, не применяется к сравнению между целым и «Нет», потому что «Нет» имеет тип «NoneType», который появляется после '' int ' '. Возможно, второе правило применимо, хотя (в тесте I id (1)> id (None) 'был' True'). – EOL