[Python-Dev] itertools predicates

Stephen J. Turnbull turnbull.stephen.fw at u.tsukuba.ac.jp
Thu Nov 3 06:07:34 EDT 2016

Francisco Couzo writes:

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

I don't understand what you mean by "consistent".  I would argue that
in Python, an argument of None means "use the TOOWTDI default".  For
"filterfalse", bool() is pretty obvious for the default predicate
since most Python classes do have a boolean interpretation.  For
"groupby", I guess the identity is the "intuitive" default.  But for
dropwhile, bool() or the identity seem like obvious choices, but
intuitively they're not very useful since the head of what's left is a
false-y.  When would you want that?  Typically false-ies are "nothing
to see here, people, move along" values.  I guess that consideration
suggest lambda x: not(x), but I don't see why one would want to spell
that dropwhile(None, ...) rather than dropwhile(not, ...), especially
since in many contexts what you might really want (and expect None to
default to) is dropwhile(lambda x: x is None, ...).

Bottom line for me is that this use (and non-use) of None is consistent
with Python practice regarding defaults.

So, "accepts None" vs "doesn't accept None" doesn't seem to me to be
an important enough consistency to impose unobvious semantics on
dropwhile(None, ...).

More information about the Python-Dev mailing list