Verbose and flexible args and kwargs syntax
Terry Reedy
tjreedy at udel.edu
Mon Dec 12 16:58:33 EST 2011
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
More information about the Python-list
mailing list