Steve,

I don't think I understand.  Here is what I just tried:

'>>> def f():
        x = 3
        d = locals()
        print x
        print d['x']
        d['x'] = 5
        print x

        
'>>> f()
3
3
3
'>>>

In your example, x had not yet been initialised, maybe. What I am seeing is that "x" does not seem to update when being assigned to - I guess this is what you are referring to by being unreliable.

But "unreliable" sounds kinda vague and intermittent, and I assume that is not the case here - What is the Rule(tm)?

Thanks
Caleb



On Wed, 08 Dec 2004 16:59:23 GMT, Steven Bethard <[EMAIL PROTECTED]> wrote:

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.

http://docs.python.org/lib/built-in-funcs.html

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

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


>>> def f(): ... print locals() is globals() ... locals()['x'] = 3 ... print x ... >>> f() False 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


Steve

-- http://mail.python.org/mailman/listinfo/python-list

Reply via email to