On Sep 23, 5:49 pm, "Rhodri James" <rho...@wildebst.demon.co.uk> wrote: > On Thu, 24 Sep 2009 01:34:35 +0100, andrew cooke <and...@acooke.org> wrote: > > > For example, I assume it's possible to somehow access the dictionary > > for the current block, but I can't see how to do this after > > assignment. If I do it in the Foo constructor, for example, "a" will > > not yet be bound. > > I apologise for failing to notice earlier that you know what you're > talking about. I blame the hour :-) > > I'm not sure you can access the namespace dictionary of the "current > block" (module?), that's the problem. Oh, except via locals(), which > might do exactly what you're after depending. Excuse me, I'm being > very dim tonight.
Hmmm. @contextlib.contextmanager def capture_changed_bindings(): before = sys._getframe(2).f_locals.copy() changed = {} yield changed after = sys._getframe(2).f_locals for key,value in after.iteritems(): if value is changed: continue if key not in before or value is not before[key]: changed[key] = value def test(): a = 2 b = 3 c = 4 with capture_changed_bindings() as changed: b = 5 c = 4 d = 6 print changed test() Quick and dirty, not robust at all. But you get the idea. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list