Accessing the name of an actual parameter

Duncan Booth duncan.booth at invalid.invalid
Tue Jan 26 11:13:16 EST 2010


Gary Herron <gherron at islandtraining.com> wrote:

> It's naive to think this question even makes sense.  There are many ways 
> f can be called which don't involve a parameter:
> 
> f(42)
> f(time())
> f(a+123)
> f(sin(a))
> f(f(1))
> 
> and so on. 

So long as the OP doesn't care if they get no names or several name that 
might not matter. However, explicitly passing in the name you want to use 
is likely to be more useful.

>>> def getcallersnames(obj):
	f = inspect.currentframe().f_back.f_back
	return [name for name in f.f_locals if f.f_locals[name] is obj]

>>> def bip(x):
	print getcallersnames(x)

	
>>> def foo(bar):
	baz = bar
	bip(baz)
	bip(baz+1)

	
>>> foo(3)
['bar', 'baz']
[]

>>> bip(bip)
['bip']

-- 
Duncan Booth http://kupuguy.blogspot.com



More information about the Python-list mailing list