default tuple unpacking?
Peter Hansen
peter at engcorp.com
Wed Sep 4 22:37:05 EDT 2002
Bernhard Herzog wrote:
> Peter Hansen <peter at engcorp.com> 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.
-Peter
More information about the Python-list
mailing list