(original) (raw)

Some functions that take a predicate from itertools accept None as its predicate:

>>> list(itertools.filterfalse(None, range(10)))
\[0\]
>>> list(itertools.groupby(\[0,0,1,1\], None))
\[(0, ), (1, 0471d0>)\]

While others don't:

>>> list(itertools.dropwhile(None, range(10)))
Traceback (most recent call last):
File "", line 1, in
TypeError: 'NoneType' object is not callable

I'd be interested in writing a patch to make itertools more consistent if there's a consensus.

I see two possible solutions:
  • Either remove None as a predicate parameter, which would not be backwards compatible.
  • Or make the functions that don't accept None start accepting it.