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/

Reply via email to