* for generic unpacking and not just for arguments?
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Mon Nov 30 09:50:39 EST 2009
On Sun, 29 Nov 2009 13:45:18 -0600, Tim Chase wrote:
>> The feature is available in Python 3.x:
>>
>>>>> a, b, *c = 1, 2, 3, 4, 5
>>>>> a, b, c
>> (1, 2, [3, 4, 5])
>>>>> a, *b, c = 1, 2, 3, 4, 5
>>>>> a, b, c
>> (1, [2, 3, 4], 5)
>
> This is a nice feature of 3.x but I'm disappointed (especially in light
> of the move to make more things iterators/generators), that the first
> form unpacks and returns a list instead returning the unexhausted
> generator.
So you want *x behave radically different in subtly different contexts?
a, *x, b = iterator
would give x a list and iterator run to exhaustion, whereas:
a, b, *x = iterator
would give x identical to iterator, which hasn't run to exhaustion, while
both of these:
a, *x, b = sequence
a, b, *x = sequence
would give x a list, but in the second case, unlike the case of
iterators, x would not be identical to sequence.
No thank you, I'd prefer a nice, consistent behaviour than a magical "Do
what I mean" function.
However, having some syntax giving the behaviour you want would be nice.
Something like this perhaps?
a, b, c = *iterable
equivalent to:
_t = iter(iterable)
a = next(_t)
b = next(_t)
c = next(_t) # and so on for each of the left-hand names
del _t
That would be useful.
--
Steven
More information about the Python-list
mailing list