[Python-Dev] More flexible namespaces.

M.-A. Lemburg mal at lemburg.com
Fri Apr 30 10:22:46 CEST 1999


Mark Hammond wrote:
> 
> Here is a bit of an idea that I first came up with some years ago.  Guido's
> response at the time was "sounds reasonable as long as we dont slow the
> normal case down".
> 
> To cut a long story short, I would like eval and exec to be capable of
> working with arbitrary mapping objects rather than only dictionaries.  The
> general idea is that I can provide a class with mapping semantics, and pass
> this to exec/eval.

This involves a whole lot of changes: not only in the Python core,
but also in extensions that rely on having real dictionaries available.

Since you put out to objectives, I'd like to propose a little
different approach...

1. Have eval/exec accept any mapping object as input

2. Make those two copy the content of the mapping object into real
   dictionaries

3. Provide a hook into the dictionary implementation that can be
   used to redirect KeyErrors and use that redirection to forward
   the request to the original mapping objects

> This would give us 2 seriously cool features (that I want <wink>), should
> anyone decide to write code that enables them:
> 
> * Case insensitive namespaces.  This would be very cool for COM, and as far
> as I know would please the Alice people.  May open up more embedding
> opportunities that are lost if people feel strongly about this issue.

This is covered by 1 and 2.

> * Dynamic name lookups.  At the moment, dynamic attribute lookups are
> simple, but dynamic name lookups are hard.  If I execute code "print foo",
> foo _must_ pre-exist in the namespace.  There is no reasonable way I can
> some up with so that I can fetch "foo" as it is requested (raising the
> NameError if necessary).  This would also be very cool for some of the COM
> work - particularly Active Scripting.

This is something for 3.

I guess it wouldn't cause any significant slow-down and can be
imlemented with much less code than the "change all PyDict_GetItem
to PyObject_GetItem" thingie.

The real thing could then be done for 2.0 where PyDict_Check()
would presumably not rely on an adress but some kind of inheritance
scheme indicating that the object is in fact a dictionary.

Cheers,
-- 
Marc-Andre Lemburg                               Y2000: 245 days left
---------------------------------------------------------------------
          : Python Pages >>> http://starship.skyport.net/~lemburg/  :
           ---------------------------------------------------------





More information about the Python-Dev mailing list