Finding the name of a function while defining it

Abhas Bhattacharya abhasbhattacharya2 at gmail.com
Thu Dec 27 08:26:36 CET 2012


On Wednesday, 26 December 2012 08:41:28 UTC+5:30, Roy Smith  wrote:
> In article <c9548d77-ccc3-4b47-b84b-9a9f0c2852ce at googlegroups.com>,
> 
>  Abhas Bhattacharya <abhasbhattacharya2 at gmail.com> wrote:
> 
> 
> 
> > While I am defining a function, how can I access the name (separately as 
> 
> > string as well as object) of the function without explicitly naming 
> 
> > it(hard-coding the name)?
> 
> > For eg. I am writing like:
> 
> > def abc():
> 
> >     #how do i access the function abc here without hard-coding the name?
> 
> 
> 
> Do you need it at compile-time, or is it good enough to have the name a 
> 
> run-time?  Assuming the latter, then I'm thinking the traceback module 
> 
> is your friend.  Call traceback.extract_stack() and pull off the last 
> 
> frame in the stack.  The function name will be in there.
> 
> 
> 
> There may be a cleaner way, but that's what I've done in the past.
> 
> 
> 
> I've only ever wanted the name.  If you need the actual function object, 
> 
> I suppose you might eval() the name, or something like that.

I need it compile-time.
During run-time, I can always use: function_name.__name__ (although that's kind of lame because it returns "function_name"). But if the function itself contains print(__name__) and I call the function, it returns __main__ (yes, __main__ itself, not the string "__main__") (which is the calling function).



More information about the Python-list mailing list