updating locals() and globals() (WAS: How do I do this? (eval() on the left hand side))

Steven Bethard steven.bethard at gmail.com
Wed Dec 8 17:59:23 CET 2004

Peter Hansen wrote:
> Nick Coghlan wrote:
>> Generally, altering the contents of the dicts returned by locals() and 
>> globals() is unreliable at best.
> Nick, could you please comment on why you say this about globals()?
> I've never heard of any possibility of "unreliability" in updating
> globals() and, as far as I know, a large body of code exists which
> does in fact rely on this -- much of mine included. ;-)

Updating locals() is unreliable.  Updating globals() is fine, AFAIK.


I believe that the only time that locals() is updatable is when locals() 
is globals():

 >>> locals() is globals()
 >>> x
Traceback (most recent call last):
   File "<interactive input>", line 1, in ?
NameError: name 'x' is not defined
 >>> locals()['x'] = 3
 >>> x

 >>> def f():
...     print locals() is globals()
...     locals()['x'] = 3
...     print x
 >>> f()
Traceback (most recent call last):
   File "<interactive input>", line 1, in ?
   File "<interactive input>", line 4, in f
NameError: global name 'x' is not defined


More information about the Python-list mailing list