[Python-Dev] locals() (was Re: accumulator display syntax)

Guido van Rossum guido at python.org
Tue Oct 21 18:25:28 EDT 2003


> >Argh, someone *could* pass around a copy of locals() and make an
> >assignment into that.
> 
> Not when the locals() is that of a CPython function, and I expect the same 
> is true of Jython functions.

Well, the effect is undefined; there may be things you can do that
would force the changes out to the real local variables.

> >   But I think we're already deprecating
> >non-read-only use of locals(), so I'd like to ban that as abuse.
> 
> FWIW, both Zope 3 and PEAK currently make use of 'locals()'
> (actually, sys._getframe()) to modify locals of a class or module
> scope (i.e. non-functions).  For both class and module scopes, it
> seems to be implied by the language definition that the local
> namespace is the __dict__ of the corresponding object.
> 
> So, is this deprecated usage for class and module objects too?

It isn't.  I'm not sure it shouldn't be; at some point it might be
attractive to lock down the namespace of certain modules and classes,
and in fact new-style classes already attempt to lock down their
__dict__.  Fortunately the __dict__ you see when executing a function
during the class definition phase is not the class dict; the class
dict is a copy of it taken by the class creation code.

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list