[Python-Dev] Deprecating locals() (was Re: nested scopes and global: some corner cases)

Samuele Pedroni Samuele Pedroni <pedroni@inf.ethz.ch>
Mon, 12 Mar 2001 21:23:25 +0100 (MET)


Hi.

[GvR]
> > I imagine a (new) function that produce a snap-shot of the values in the
> > local,free and cell vars of a scope can do the job required for simple 
> > debugging (the copy will not allow to modify back the values), 
> > or another approach...
> 
> Maybe.  I see two solutions: a function that returns a copy, or a
> function that returns a "lazy mapping".  The former could be done as
> follows given two scopes:
> 
> def namespace():
>     d = __builtin__.__dict__.copy()
>     d.update(globals())
>     d.update(locals())
>     return d
> 
> The latter like this:
> 
> def namespace():
>     class C:
>         def __init__(self, g, l):
>             self.__g = g
>             self.__l = l
>         def __getitem__(self, key):
>             try:
>                 return self.__l[key]
>             except KeyError:
>                 try:
>                     return self.__g[key]
>                 except KeyError:
>                     return __builtin__.__dict__[key]
>     return C(globals(), locals())
> 
> But of course they would have to work harder to deal with nested
> scopes and cells etc.
> 
> I'm not sure if we should add this to 2.1 (if only because it's more
> work than I'd like to put in this late in the game) and then I'm not
> sure if we should deprecate locals() yet.
But in any case we would need something similar to repair pdb,
this independently of locals deprecation...

Samuele.