On Sun, Apr 29, 2018 at 9:28 PM, Tim Peters <tim.pet...@gmail.com> wrote:
> [David Mertz <me...@gnosis.cx>] > > Ooops. My proof [of] anti-concept has a flaw. It only "shadows" names > that > > already exist. Presumably that's the wrong idea, but it's easy enough to > > change if desired. > > with sublocal(a=6): > g("first in block") > a = 5 > g("set a to 5") > b = 19 > g("set b to 19") > g("after") > > Worm around that too, then going back to the example at the top, if > the manager's > > locals().update(_locals) > > had the intended effect, it would end up restoring `b` to 2 too, yes? > The only names that "should be" restored are the names in the `kws` > dict. > Actually, that wasn't my intention. As I imagined the semantics, I wanted a context manager that restored the "outside" context for anything defined "inside" the context. Allowing keyword arguments was just an extra "convenience" that was meant to be equivalent to defining/overwriting variables inside the body. So these would be equivalent: ## 1 with sublocal(): a = 1 b = 2 x = a + b # a, b now have their old values again ## 2 with sublocal(a=1, b=2): x = a + b # a, b now have their old values again ## 3 with sublocal(a=1): b = 2 x = a + b # a, b now have their old values again I knew I was ignoring nonlocals and nested function scopes. But just trying something really simple that looks like the un-proposal in some cases. Maybe there's no way in pure-Python to deal with the edge cases though.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/