[Python-ideas] Two small functional-style-related improvements

Terry Reedy tjreedy at udel.edu
Sun Mar 27 21:09:39 CEST 2011


On 3/27/2011 7:53 AM, Jan Kaliszewski wrote:

> Which one of the following do you prefer?
>
> * filter((lambda x: x is None), iterable)
> * filter(functools.partial(operator.is_, None), iterable)

These two produce an iterable of Nones, one for each None in the 
original iterable. I have trouble imagining a real use case for this.

I can see a use cases for dropping everything but None. This can, of 
course, always be done at the point of use:

for ob in iterable:
   if ob is not None:
     do_something(ob)

If you want to separate the conditional from the action and hide the 
conditional, then write a trivial, specific, filter generator:

def dropNone(it):
   for ob in it:
     if ob is not None:
       yield ob

for ob in dropNone(iterable):
   do_something(ob)

For repeated use, I prefer dropNone to any filter version, including 
your proposal.

> * filter(None, (x is None for x in iterable))

This is not the same thing as the above as it instead produces an 
iterable of Trues, one for each None in iterable.

-- 
Terry Jan Reedy




More information about the Python-ideas mailing list