[Python-Dev] towards a faster Python
Chris Reedy
creedy@mitretek.org
Mon, 09 Jun 2003 18:15:30 -0400
Neil Schemenauer wrote:
> The goal is that the compiler should be able to determine the scope of a
> name at compile time. Code like the above does not allow that and so
> non-local names must be searched for in both globals and builtins at run
> time. Unfortunately the warning is not bulletproof. It's possible to
> modify the module dict directly and bypass the warning. I'm not sure
> what to do about that. :-(
I think you might be looking for a test something like:
class special_dict(dict):
"""Special dictionary that doesn't allow changes to built-in names."""
def __setitem__(self, key, value):
if(key in self and hasattr(self[key], '__builtin_name__')
and key == self[key].__builtin_name__):
raise_or_warn_changing_builtin(self, key, value)
super(special_dict, self).__setitem__(key,value)
where __builtin_name__ is a new special attribute that would appear only
on built-in objects that aren't supposed to have their names changed.
The class special_dict would be used in situations where these kinds of
changes aren't supposed to occur. (Of course, I'd expect this to be
implemented in C in the guts of the interpreter for the obvious
performance reasons.)
This approach allows code like, for example:
globals().myownrange = range
...
for i in myownrange(5):
...
Chris
P.S. I've been a lurker on this list for some time. I now propose to
climb back under my rock.
This is informal and not an official Mitretek Systems position.
Dr. Christopher L. Reedy, Senior Principal Software Engineer
Mitretek Systems
Email: creedy@mitretek.org