default tuple unpacking?

Peter Hansen peter at
Wed Sep 4 22:37:05 EDT 2002

Bernhard Herzog wrote:
> Peter Hansen <peter at> writes:
>>Hmm... I think there might be an inconsistency or an unexpected
>>result in this.  What if e already contains a tuple?
>>   e = (1, 2, 3)
>>   *a = e        # a is ((1, 2, 3), )
>>That seems sensible, and it's just what happens if you pass
>>"e" in to a function defined as "def func(*a)".
> No it isn't. If you call func as func(e) the tuple being unpacked into
> the function's parameters is (e,) not e. So the situation is more like
> calling func as func(*e) so that *a = e would be the same as a = e or
> perhaps a = tuple(e)

Quite right... my mistake.

>>Now what about this:
>>   a, *b = e     # a is 1, b is (2, 3)
>>That's one possible result, and presumably the one you want with
>>this syntax, but it's not what you'd get with the function syntax:
>>   def func(a, *b):
>>     print a
>>     print b
>>   func(e)
> Again the tuple being upacked to a, *b is (e,)...
>>Here of course you get (1, 2, 3) in "a" and () in b. 
> ... so this is obviously what you should get.

A sign that even when one can use these effectively in programs, one
can be confused by the arbitrary choice of syntax when talking about
it.  Thanks for the corrections.


More information about the Python-list mailing list