On 12/28/2015 11:08 PM, Franklin? Lee wrote:
What do people think about having `max` and `min` ignore `None`?
Examples: max(1, None) == 1 min(1, None) == 1
This amounts to saying that the comparisions 1 < None and 1 > None are both defined and both True.
max([1, None]) == 1 max(None, None) == max() or max(None, None) == max()
(The last one currently throws two different errors.)
This change would allow one to use `None` as a default value. For example,
def my_max(lst): best = None for x in lst: best = max(best, x) return best
rewrite this as
def my_best(iterable): it = iter(iterable) try: best = it.next() except StopIteration: raise ValueError('Empty iterable has no maximum') for x in it: if x > best: best = x
Currently, you would initialize `best` to the first element,
Since an empty iterable has no max (unless one wants to define the equivalent of float('-inf') as a default), initializing with the first element is the proper thing to do.
I'm concerned about this silencing some bugs which would have been caught before. I'm also worried about whether it would make sense to people learning Python.
None currently means 'no value', which means that most operations on None are senseless.