On 2018-08-28 18:57, Guido van Rossum wrote:
So we currently have iterable unpacking:

   a, b, c = x  # x better be an iterable of exactly 3 values

as well as tuple packing:

   x = a, b, c  # sets x to a tuple of 3 values (a, b, c)

and we can combine these, e.g.:

   a, b, c = x, y, z

and this still creates an intermediate, anonymous tuple from the values on the right. (At least in the formal semantics -- it may be optimized away if that can be done safely.)

This leads to the following idioms:

   a, b = b, a  # swap variables
   a, b, c = b, c, a  # rotate variables

That's all well established (and I have to admit that the elegance of the swap idiom was one reason to add this to the earliest version of the language).

The proposal on the table is to see if there's a logical extension for augmented assignment.

If we look at this:

   a, b, c = x, y, z

and notice that it's equivalent to this:

   a = x
   b = y
   c = z

we might propose (as the OP did) that this:

   a, b, c += x, y, z

could be made equivalent to this:

   a += x
   b += y
   c += z

but the question is, what would this do?

   a, b, c += x

Presumably it requires that x is an iterable of 3 values, so it would be translated to this first:

   x0, x1, x2 = x
   a, b, c += x0, x1, x2

However, a user who doesn't typically think about the actual semantics of iterable unpacking and tuple packing might think this would instead mean the following:

   a += x
   b += x
   c += x

IOW they might think that this is a clever way to increment three variables at once:

   a, b, c += 1

This ambiguity (in naive users' minds) leads me to frown upon the proposal.

By the same logic, wouldn't such a naive user also expect:

    a, b, c = 0

to set three variables to 0?

If we were to ignore the naive view, we could definitely give semantics to `a, b, c += ...` -- basically it would unpack the RHS into the right number of elements (if needed) and call __iadd__ pairwise. But I am not so keen, because the ambiguity of `a, b, c += x`.

Perhaps someone can do some research and unearth real code that contains series of += assignments that would become more readable by collapsing them into a single line using the proposed construct.

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to