[Python-ideas] Provide a 'key' argument for all() and any() builtins

Chris Rebert pyideas at rebertia.com
Mon Jul 23 06:39:13 CEST 2012


On Sun, Jul 22, 2012 at 9:03 PM, Giampaolo Rodolà <g.rodola at gmail.com> wrote:
> This would be similar to 'key' argument already available for min(), max()
> and sorted() and would let user decide what must be considered True and what
> not.
> Some use cases:
>
>
> all(a, b, c, ... key=callable)

You're missing some brackets or parens there:
    all([a, b, c, ...], key=callable)

<snip>
> Thoughts?

I see negligible advantage over just writing the generator expression directly:
    all(callable(item) for item in iterable)
=== all(iterable, key=callable)
(which is about comparable to the difference between a map()
invocation vs. a list comprehension, and the choice there seems to be
largely a matter of taste)

min() & max() return the result object satisfying the constraint, so
the `key` argument makes sense for when you want to e.g. find the
cheapest house rather than the price of the cheapest house.
In contrast, any() & all() *always* just return a simple bool result,
not the object whose truthiness determined the predicate's result, so
`key` would be pointless since the result gets converted to a plain
bool anyway (or at least, we can conceptualize the implementation as
if it worked that way).

Cheers,
Chris



More information about the Python-ideas mailing list