* for generic unpacking and not just for arguments?

Russell Warren russandheather at gmail.com
Sun Nov 29 15:25:24 CET 2009

Is there a reason that this is fine:

>>> def f(a,b,c):
...   return a+b+c
>>> f(1, *(2,3))

but the code below is not?

>>> x = (3, 4)
>>> (1, 2, *x) == (1, 2, 3, 4)
Traceback (most recent call last):
  File "<string>", line 1, in <fragment>
invalid syntax: <string>, line 1, pos 8

Why does it only work when unpacking arguments for a function?  Is it
because the code below is preferred, and more readable?

>>> x = (3, 4)
>>> (1, 2) + x == (1, 2, 3, 4)

I've rooted around to see if there is an answer already and found some
threads going way back to 1998 (!!), but can't find a concise answer
as to why it is limited to args.

I don't have a burning desire for this to work, but I just tried it
unsuccessfully when building up a tuple and was mildly surprised that
it didn't work, so I'm curious why.

Maybe it's just that * is strictly for arguments, and trying it for
generic tuple unpacking is abuse (which is down the corridor in 12A).

More information about the Python-list mailing list