On 9 May 2018 at 03:57, Tim Peters <tim.peters@gmail.com> wrote:
These all match my expectations.  Some glosses:

[Guido]
> We should probably define what happens when you write [p := p for p in
> range(10)]. I propose that this overwrites the loop control variable rather
> than creating a second p in the containing scope -- either way it's probably
> a typo anyway.

A compile-time error would be fine by me too.  Creating two meanings
for `p` is nuts - pick one in case of conflict.  I suggested before
that the first person with a real use case for this silliness should
get the meaning their use case needs, but nobody bit, so "it's local
then" is fine.

I'd suggest that the handling of conflicting global and nonlocal declarations provides a good precedent here:

>>> def f():
...     global x
...     nonlocal x
...     x = 1
...
  File "<stdin>", line 2
SyntaxError: name 'x' is nonlocal and global

Since using a name as a binding target *and* as the iteration variable would effectively be declaring it as both local and nonlocal, or as local and global.

Cheers,
Nick.

--
Nick Coghlan   |   ncoghlan@gmail.com   |   Brisbane, Australia