[Tutor] How do I do this in python?

A.T.Hofkamp a.t.hofkamp at tue.nl
Thu Jun 11 13:12:02 CEST 2009


Robert Lummis 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
> 
> of course displaying whatever the actual current values are. For a
> collection object it would make sense to output just the first few
> values.

To catch any number of arguments, you could do something like

def show(*args):
   print args

but that gives you just a list of values, like [3, 'john', 'Monday']


Inside a function there is no way of finding out how the values ended up as 
argument (or even whether a value has a name in the first place).

In general, a value may have several names, eg

a = []
b = a

or no names at all like

show(1)


In other words, what you want is not possible.

> So within the 'show' function definition I have to somehow get a list
> of the literal argument names it was called with and then use the
> names as globals to get the values. How do I do that?

globals is not enough. What if I use show in a function?




If you really insist on using 'show()', you could do

show(('a', a), ('b', b), ('c', c))

with

def show(*args):
   print '\n'.join(['%s = %s' % a for a in args])

but I think it is too complicated to type, compared to the 'print' statement 
below.

> If this can't be done but there is a completely different way to
> achieve a similar result, what is it?

print "abc=", a, b, c

is what I always use.

> I'm trying to learn python but it's a struggle because the
> documentation is so dispersed. If there is a solution to this


> question, what documentation could I have looked at to find it on my
> own?

Dispersed?
Everything is documented at docs.python.org.
(your Python version may be the cause of your problems here though)

> BTW I'm using python 3.01 if it matters.

That version is not ready for real use yet.
For learning Python you better use a 2.X version (2.6 is current).

Albert


More information about the Tutor mailing list