On 7 May 2018 at 13:15, Tim Peters <tim.pet...@gmail.com> wrote: > [Tim] > >> There's a difference, though: if `y` "leaks", BFD. Who cares? ;-) > >> If `y` remains inaccessible, there's no way around that. > > Part of it is just that people seem to be fighting for the sake of > > fighting. I'm weary of it, and I'm not going to debate this point with > > you. You want 'em to leak? No problem. Implement it that way and I'm > > not going to argue it. > > I'm more interested in real-life use cases than in arguments. My > suggestion came from staring at my real-life use cases, where binding > expressions in comprehensions would clearly be more useful if the > names bound leaked. Nearly (but not all) of the time,, they're quite > happy with that for-target names don't leak. Those are matters of > observation rather than of argument. >
The issue is that because name binding expressions are just ordinary expressions, they can't be defined as "in comprehension scope they do X, in other scopes they do Y" - they have to have consistent scoping semantics regardless of where they appear. However, it occurs to me that a nonlocal declaration clause could be allowed in comprehension syntax, regardless of how any nested name bindings are spelt: p = rem = None while any((rem := n % p) for p in small_primes nonlocal (p, rem)): # p and rem were declared as nonlocal in the nested scope, so our rem and p point to the last bound value I don't really like that though, since it doesn't read as nicely as being able to put the nonlocal declaration inline. Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/