Evan Simpson wrote: > In Python 2.4 the following works: > > >>> class G(dict): > ... def __getitem__(self, k): > ... return 'K' + k > ... > >>> g = G() > >>> exec 'print x, y, z' in g > Kx Ky Kz > >>> > > ...while in Python 2.3 it fails with NameError: name 'x' is not defined. Is > this an "accidental > feature", or can I count on this working in future versions of Python?
it's an official addition, and it's at least to safe for it to be in all future versions of CPython 2.X. http://www.python.org/doc/2.4/whatsnew/node12.html The eval(expr, globals, locals) and execfile(filename, globals, locals) functions and the exec statement now accept any mapping type for the locals parameter. Previously this had to be a regular Python dictionary. (Contributed by Raymond Hettinger.) I don't think he added this purely by accident, but it might have been a side effect of some other optimization. ;-) > For that matter, is there a way to do this (intercept global variable > accesses) > in Python 2.3? not that I'm aware of... </F> -- http://mail.python.org/mailman/listinfo/python-list