On 12/12/2011 12:12 PM, Eelco wrote:

Im not sure if this is a genuine understanding, or trollish
obtuseness.

If you are referring to what I write, it is based on genuine understanding of Python.

Yes, the target can be anywhere in the sequence. And yes, the
resulting list can contain objects of any type, so its very flexible
in that regard too.

But to relate it to the topic of this thread: no, the syntax does not
allow one to select the type of the resulting sequence. It always
constructs a list.

One use case of *target is to ignore the stuff collected in the target because one only wants a few end values from the iterable. Another is to pull stuff out because one wants to iterate through the rest. For both uses, a list is as good as anything.

Yes, we can cast the list to be whatever we want on the next line,

Convert. For the very few cases one wants to do this, it is quite adequate.

> but the question is whether this language design can be improved upon.

Not easily.

The choice of a list feels arbitrary,

On the contrary, a list is precisely what is needed to collect an indefinite number of leftovers.

> adding another line to cast it to
something else would be even more verbose, and whats more, there would
be serious performance implications if one should seek to apply this
pattern to a deque/linkedlist; it would make taking off the head/tail
of the list from a constant to a linear operation.

For a linked list, no *target and no copying is needed:

head, tail = llist

head, deque(tail) = somedeque

Is better in every way I can think of (readability, consistence,
performance) than:

head, *tail = somedeque
tail = deque(tail)

But your suggestion is much worse in each way than

head = somedeque.popleft()

To repeat, there is no reason to copy even once. If one does not want to mutate the deque, then one mutates an iterator view of the deque.

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to