[Python-ideas] Break the dominance of boolean values in boolean context

Steven D'Aprano steve at pearwood.info
Thu Sep 15 01:04:12 CEST 2011

Mike Graham wrote:
> On Wed, Sep 14, 2011 at 9:12 AM, Ethan Furman <ethan at stoneleaf.us> wrote:
>> Perhaps 'need' is putting it too strongly, but if any()/all() were changed
>> to return the first true-ish/last false-ish value, then the extra parameter
>> would be convenient in specifying the value desired if it wasn't True/False.
>>  Sort of like {}.get('nothere', '5').
>> ~Ethan~
> It's worth noting that this implementation of any would make it
> suspiciously similar to next.

I don't see that. next() returns the next item from an iterator 
regardless of its boolean state. The actual and proposed implementations 
of any() skip over false items. The proposal might be implemented 
something like this:

def any(iterable):
     item = False
     for item in iterable:
         if item:
             return item  # currently return True
     return item

The practical difference should be clear if you compare calling:

next(iter([0]*1000 + [1]))


any([0]*1000 + [1])


More information about the Python-ideas mailing list