[Python-Dev] PEP 572: Assignment Expressions -- intention to accept, near-final draft
Guido van Rossum
guido at python.org
Mon Jul 9 23:43:14 EDT 2018
On Mon, Jul 9, 2018 at 7:40 PM, Glenn Linderman <v+python at g.nevcal.com>
> On 7/9/2018 6:00 PM, Guido van Rossum wrote:
> This rule is included to simplify the choice for the user between an
> assignment statements and an assignment expression -- there is no
> "statements" should not be plural in the above line.
syntactic position where both are valid.
> An exception to this special case applies when the target name is the
> same as a loop control variable for a comprehension containing it.
> This is invalid. This exception exists to rule out edge cases of the
> above scope rules as illustrated by ``[i := i+1 for i in range(5)]``
> or ``[[(j := j) for i in range(5)] for j in range(5)]``. Note that
> this exception also applies to ``[i := 0 for i, j in stuff]``, as well
> as to cases like ``[i+1 for i in i := stuff]``.
> It is unclear whether exactly what is invalid. Is the use of the target
> name that is the same as (any of the nested) loop control variable invalid?
> I think, from discussions, that that is what is meant. But this paragraph
> could be interpreted as meaning the special case doesn't apply, meaning
> that the target name would be in a "sublocal" scope.
Really? If it didn't say "this is invalid" I could see that "exception to
the special case" might be interpreted as "the special case doesn't apply".
But with "This is invalid" explicitly added I don't see how that
interpretation could be valid. Is it clearer if I changed that to "Such
code is invalid"? Or perhaps I should move "This is invalid" to the end of
> The ``:=`` operator groups more tightly than a comma in all syntactic
> positions where it is legal, but less tightly than all operators,
> If comma is considered an operator, this sentence is inconsistent, would
> need to be "all other operators". Even if comma is not considered an
> operator, the sentence would be more clear with "other" added, since ":="
> is an operator.
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-Dev