[Python-Dev] peps 329, 266, 267
Phillip J. Eby
pje at telecommunity.com
Wed Apr 21 16:54:34 EDT 2004
At 04:39 PM 4/21/04 -0400, Jewett, Jim J wrote:
> >> If this is really only about globals and builtins,
> >> then you can just initialize each module's dictionary
> >> with a copy of builtins. (Or cache them in the module
> >> __dict__ on the first lookup, since you know where it
> >> would have gone.)
>
>Phillip J. Eby:
>
> > Interesting thought. The same process that currently
> > loads the __builtins__ member could instead update the
> > namespace directly.
>
> > There's only one problem with this idea, and it's a big
> > one: 'import *' would now include all the builtins,
> > causing one module's builtins (or changes thereto) to
> > propagate to other modules.
>
>Why is this bad?
Because some modules are examined by software, and only the expected names
belong there. For example, I believe if you run 'pydoc' on such a module,
it will proceed to document all the builtins.
>The reason to import * is that you intend to use the
>module's members as if they were your own. If the
>other module actually has modified a builtin, you'll
>need to do the same, or the imported members won't
>work quite right.
*shudder* I'm glad the language really doesn't work in the way you just
described. :) No, just because one module shadows a builtin, doesn't mean
you have to follow suit.
> > ... declare that the any builtin used in a module
> > that's known to be a builtin, is allowed to be
> > optimized to the meaning of that builtin.
>
> > In effect, '__builtins__' should be considered an
> > implementation detail, not part of the language,
>
>Many builtins (None, True, KeyError) are effectively
>keywords, and I would agree.
>
>Others, like __debug__, are really used for
>intermodule communication, because there isn't
>any other truly global namespace. (Perhaps
>there should be a conventional place to look,
>such as a settings module?)
__debug__ is also a builtin, in the sense of being optimizable by the
compiler, so I don't see any reason to look at it differently. In fact,
isn't __debug__ *already* treated as a constant by the compilers?
Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32
Type "copyright", "credits" or "license" for more information.
IDLE 0.8 -- press F1 for help
>>> __debug__
1
>>> __debug__=0
SyntaxError: can not assign to __debug__ (<pyshell#1>, line 1)
>>>
Yep, I guess so.
More information about the Python-Dev
mailing list