[Python-ideas] Add single() to itertools

Steven D'Aprano steve at pearwood.info
Mon Oct 30 21:09:09 EDT 2017


On Tue, Oct 31, 2017 at 07:51:02AM +1100, Cameron Simpson wrote:

>  return the(nodes)
> 
> It's this kind of thing that expresses my intent better than the:
> 
>  node, = nodes
>  return node
> 
> idiom.

If the intent is to indicate that there is only one node, then 
"the(nodes)" fails completely. "The" can refer to plurals as easily as 
singular:

"Wash the dirty clothes."
(Later) "Why did you only wash one sock?"


The simplest implementation of this "single()" function I can think of 
would be:

def single(iterable):
    result, = iterable
    return result


That raises ValueError if iterable has too few or too many items, which 
I believe is the right exception to use. Conceptually, there's no 
indexing involved, so IndexError would be the wrong exception to use. 
We're expecting a compound value (an iterable) with exactly one item. If 
there's not exactly one item, that's a ValueError.



-- 
Steve


More information about the Python-ideas mailing list