
On 9 May 2018 at 03:57, Tim Peters <tim.peters@gmail.com> wrote:
These all match my expectations. Some glosses:
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
[Guido] 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