[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