On Wed, Jun 10, 2009 at 9:43 PM, Robert Lummis<robert.lum...@gmail.com> wrote: > I want to write a function that I can use for debugging purposes that > prints the values of whatever list of object references it is given as > arguments, without knowing in advance how many object references it > will be called with or what they might be. For example, the call: > show(a,b,c) would output the values of the arguments like this: > > a = 3 > b = 'john' > c = 'Monday' > > while show (x) would output (for example): > > x = 3.14
Here is a pretty clean solution. It passes names rather than values, then looks the values up in the caller's stack frame. Written for Python 2.x but should work for 3.x if you change the prints. In [1]: import sys In [11]: def show(names): ....: frame = sys._getframe(1) ....: for name in names.split(): ....: if name in frame.f_locals: ....: print name, '=', frame.f_locals[name] ....: else: ....: print name, 'not found' In [12]: a=1 In [13]: b='foo' In [14]: c='bar' In [15]: show('a b c') a = 1 b = foo c = bar In [18]: show('a x') a = 1 x not found Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor