Pythonic style
Stavros Macrakis
macrakis at alum.mit.edu
Mon Sep 21 09:48:15 EDT 2020
Thanks, Tim! I didn't realize that you could write (x,) on the LHS!
Very nice, very Pythonic!
-s
On Mon, Sep 21, 2020 at 9:15 AM Tim Chase <python.list at tim.thechases.com>
wrote:
> On 2020-09-20 18:34, Stavros Macrakis wrote:
> > Consider a simple function which returns the first element of an
> > iterable if it has exactly one element, and throws an exception
> > otherwise. It should work even if the iterable doesn't terminate.
> > I've written this function in multiple ways, all of which feel a
> > bit clumsy.
> >
> > I'd be interested to hear thoughts on which of these solutions is
> > most Pythonic in style. And of course if there is a more elegant
> > way to solve this, I'm all ears! I'm probably missing something
> > obvious!
>
> You can use tuple unpacking assignment and Python will take care of
> the rest for you:
>
> >>> x, = tuple() # no elements
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> ValueError: not enough values to unpack (expected 1, got 0)
> >>> x, = (1, ) # one element
> >>> x, = itertools.repeat("hello") # 2 to infinite elements
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> ValueError: too many values to unpack (expected 1)
>
> so you can do
>
> def fn(iterable):
> x, = iterable
> return x
>
> The trailing comma can be hard to spot, so I usually draw a little
> extra attention to it with either
>
> (x, ) = iterable
>
> or
>
> x, = iterable # unpack one value
>
> I'm not sure it qualifies as Pythonic, but it uses Pythonic features
> like tuple unpacking and the code is a lot more concise.
>
> -tim
>
>
>
>
>
>
More information about the Python-list
mailing list