En Sun, 11 May 2008 01:06:13 -0300, Patrick Mullen <[EMAIL PROTECTED]> escribió:
> Yeah I don't know much about locals or globals. I've never used them
> before, just know they are there. But anyway, to illustrate what I meant by
> the interesting behavior, here is the output (and sorry for it being so
> long):
>
> IDLE 2.6a2
>>>> globals()
> {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__',
> '__doc__': None, '__package__': None}
>>>> globals().clear()
>>>> globals()
> {'__builtins__': {'bytearray': <type 'bytearray'>, 'IndexError': <type
[... long __builtins__ dictionary contents ...]
> 'exceptions.WindowsError'>}}
>>>>
>
> The OP wanted to clear the interpreter and I took a very broad (and highly
> unresearched) stab at it, and saw some behavior that I wasn't expecting.
> So before, all the builtin variables are hidden away in __builtins__, but
> after clearing globals, they are filled into globals. This doesn't really
> make sense to me, but I don't know much about __builtins__ or globals.
Look more carefully:
py> globals().clear()
py> len(globals())
1
py> globals().keys()
['__builtins__']
globals() contains now a single entry, the namespace of the __builtin__ module
(that is, __builtin__.__dict__), not the individual builtin entries (these are
the dictionary entries that you posted).
As you later noticed, this happens only on IDLE. I don't know why IDLE behaves
that way, but avoid entering "restricted mode" may be a reason (see
http://docs.python.org/lib/restricted.html )
Usually, __builtins__ contains a reference to the __builtin__ module itself
*only* in __main__; in all other modules, __builtins__ contains a reference to
the __builtin__ namespace (like what you got in IDLE after clearing globals). I
don't know *why* they are different either.
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list