[Python-ideas] How assignment should work with generators?

Kirill Balunov kirillbalunov at gmail.com
Mon Nov 27 09:50:29 EST 2017

2017-11-27 17:14 GMT+03:00 Chris Angelico <rosuav at gmail.com>:
> Nah, far easier:
> x, y = iter(it)

Yes, you are right.

>>     2. Readable and not so verbose code
> >>     3. Optimized case for x,y,*z = iterator
> >
> > The semantics of that are already set: the first two items are assigned
> > to x and y, with all subsequent items assigned to z as a list. How will
> > this change optimize this case? It still needs to run through the
> > iterator to generate the list.
> Maybe 'optimized case for "x, y, *_ = iterator" where you then never
> use _ and it has no side effects'? But that could be worded better.

Yes, you did not need to consume and then to throw out _, and in other
cases not to hang in an endless loop.

> I do think islice is verbose, but the main problem is that you have to
> match the second argument to the number of assignment targets. Slice
> notation is an improvement, but it still has that same problem.
> But perhaps this should be added to the list of options for the PEP.

 Inconvenience is that in both cases: islice and iter[:2], you should
specify the exact number of assignment targets.

> That's one of the options that I mentioned, as it's been proposed in
> the past. The problem is that it depends on internal whitespace to
> distinguish it from augmented assignment; granted, there's no way to
> use "*=" with multiple targets (or even in the single-target case, you
> can't do "x,*=it" with the comma in it), but that's still a
> readability problem.

Your suggestion using Ellipsis at the moment seems to me the most readable,

x, ... = iterable
x, y, ... = iterable

But I have not summed up yet what pitfalls can be on this path.

I really do not like to use "starred" targets in any way:

x, y, * = iterable
x, y, *...

Because any "starred" target implies consuming or collecting, and
contradicts with the proposed behavior.

With kind regards, -gdg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20171127/ac25c5fc/attachment.html>

More information about the Python-ideas mailing list