Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
Josiah Carlson wrote:
What I asked before, and what I'd like to ask again, is if there are any _nontrivial uses_ of lexically nested scopes which are made cumbersome by our inability to write to parent scopes.
The trouble with taking that position is that the very cases which would benefit are very *simple* ones, where it would be cumbersome to refactor it to use a class, or mutable object in the outer scope, etc. So you've effectively set up your acceptance criteria to be unmeetable.
If the only code that benefits from such changes are "very *simple*", then I think that says something about its necessity. That is, if anything more complicated than those that are "very *simple*" generally don't benefit, then I don't believe that such a modification would be beneficial to the language overall. Further, a simple namespace factory can handle much of the current issues, without needing to create or change keywords. def namespace(**kwds): class namespace(object): __slots__ = kwds.keys() def __init__(self): for i,j in kwds.iteritems(): setattr(self, i,j) return namespace() def trivial_counter(start): ns = namespace(current=start-1) def next(): ns.current += 1 return ns.current return next Maybe a variant of the above namespace factory should make it into the collections module.
If there aren't, then I'm going to again have to argue against new syntax, keywords, and their use.
There's one very simple way we could do this in Py3k without requiring any new syntax or keywords: just redefine the meaning of "global" to mean "not local".
I would probably be a solid -0 on such a proposal; I still don't think it's really necessary, but I've never used (or really seen) global more than one level deep, so would guess its impact would be low. - Josiah