Retrieving a variable's name.
James Stroud
jstroud at mbi.ucla.edu
Tue Aug 21 00:00:05 EDT 2007
rodrigo wrote:
> How would I go about retrieving a variable's name (not its value)? I
> want to write a function that, given a list of variables, returns a
> string with each variable's name and its value, like:
>
> a: 100
> b: 200
>
> I get the feeling this is trivial, but I have been unable to find an
> answer on my own.
>
> Thanks,
>
> Rodrigo
>
Use a dict as that is what you access when you use namespaces anyway:
py> type(globals())
<type 'dict'>
The essential problem with what you suggest is that python assigns names
to references to objects, so the interpreter can not tell what name you
want by a reference to the object, so it gives you whatever name it
happens to find, which, since the names are keys to a dict, come in
arbitrary order. For example, consider this situation:
py> a = 4
py> b = a
py> ns = globals()
py> for avar in a,b:
... for k,v in ns.items():
... if v is avar:
... print '%s is %s' % (k,v)
... break
...
avar is 4
avar is 4
So getting at the names by reference to thee objects will never be
dependable. Passing names makes more sense:
py> for aname in ['a', 'b']:
... print '%s is %s' % (aname, globals()[aname])
...
a is 4
b is 4
But this is tantamount to using a dict:
py> mydict = {'a':4, 'b':2}
py> for aname in ['a', 'b']:
... print '%s is %s' % (aname, mydict[aname])
...
a is 4
b is 2
Which is preferred because it keeps your namespaces cleaner.
James
--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095
http://www.jamesstroud.com/
More information about the Python-list
mailing list