[Python-ideas] Starred expression in right-hand side

David Pokorny dbpokorny at gmail.com
Thu Jun 26 06:36:25 CEST 2008


Since PEP 3132 gives us:

>>> x = [1,2,3]
>>> a, *b = x
>>> a
1
>>> b
[2, 3]

it seems natural that we should be able to do it the other way too:

(doesn't actually work)
>>> a, b = 1, [2,3]
>>> x = [a,*b]
>>> x
[1, 2, 3]

This is essentially itertools.chain, but of course it isn't nearly as much fun:

>>> [n for n in itertools.chain([1],[2,3])]
[1, 2, 3]

Now you might be thinking, "yeah, that's cool, but you don't really
need it" but this actually came up in practice: I have a function that
has a certain behavior for standard types, but when it sees a type it
doesn't recognize, it calls a protocol function (like __iter__ or
__next__) and expects to receive an iterable whose 0th element is a
string. Now I'm probably not going to use itertools.chain because the
only members of itertools I can reliably remember are count() and
izip(), so my next alternative (which is perfectly acceptable) is

>>> a, b = 1, [2,3]
>>> x = [a] + b

This isn't too bad, but it is slightly less clear than x = [a,*b] and
much less efficient when b is long.

It seems so simple...makes me think it came up before and I missed it.

David



More information about the Python-ideas mailing list