[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

AltStyle によって変換されたページ (->オリジナル) /