[Cython] Speedup module-level lookup

Stefan Behnel stefan_ml at behnel.de
Sat Jan 21 06:58:14 CET 2012


Chris Colbert, 19.01.2012 09:18:
> If it doesn't pass PyDict_CheckExact you won't be able to use it as the
> globals to eval or exec.

What makes you say that? I tried and it worked for me, all the way back to
Python 2.4:

--------------------
Python 2.4.6 (#2, Jan 21 2010, 23:45:25)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class MyDict(dict): pass
>>> eval('1+1', MyDict())
2
>>> exec '1+1' in MyDict()
>>>
--------------------

I only see a couple of calls to PyDict_CheckExact() in CPython's sources
and they usually seem to be related to special casing for performance
reasons. Nothing that should impact a module's globals.

Besides, Cython controls its own language usages of eval and exec.

Stefan


More information about the cython-devel mailing list