Python min/max on None type

mclafee picture mclafee · Mar 20, 2013 · Viewed 13.3k times · Source

I noticed that while the 'max' function do well on None type:

In [1]: max(None, 1)
Out[1]: 1

'min' function doesn't return anything:

In [2]: min(None, 1)
In [3]: 

Maybe it's because there is no definition for min(None, 1)? So why in max case, it return the number? Is None treated like '-infinity'?

Answer

Eric O Lebigot picture Eric O Lebigot · Mar 20, 2013

As jamylak wrote, None is simply not printed by Python shells.

This is convenient because all functions return something: when no value is specified, they return None:

>>> def f():
...     print "Hello"
...     
>>> f()
Hello
>>> print f()  # f() returns None!
Hello
None

This is why Python shells do not print a returned None value. print None is different, though, as it explicitly asks Python to print the None value.


As for comparisons, None is not considered to be -infinity.

The general rule for Python 2 is that objects that cannot be compared in any meaningful way don't raise an exception when compared, but instead return some arbitrary result. In the case of CPython, the arbitrary rule is the following:

Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.

Python 3 raises an exception, for non-meaningful comparisons like 1 > None and the comparison done through max(1, None).


If you do need -infinity, Python offers float('-inf').