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.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4