Ka-Ping Yee wrote: > A little investigation reveals: > > In module __main__: > __builtins__ is a reference to module __builtin__. > __builtin__ only exists if you import it. > > In any other module: > __builtins__ is a reference to module __builtin__'s __dict__. > __builtin__ only exists if you import it.
As I understand it, __builtins__ has always been regarded as an implementation detail, and if you want to get hold of the builtins, importing __builtin__ is the correct way to do it. The difference between __main__ and other modules is a bit weird. Phil Hassey posted some code recently that seemed to assume __builtins__ was always a module, which makes me think it was changed at some point to speed things up, but __main__ was somehow inadvertently excluded from the change. Changing __main__ to match would seem to be a good idea. I don't think it would be such a good idea to unify __builtin__ and __builtins__, because then importing __builtin__ would clobber the existing builtin namespace being used by the code -- which may not be the same thing. There might be merit in renaming __builtins__ to something less confusable, at the expense of breaking existing code which refers to it. -- Greg _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
