Equivalente de __func__ (de C) en Python

Quiero crear algún tipo de salida de depuración para python y quiero pasar el nombre de la función a otra función para la salida.

La única manera razonable que encontré para hacerlo fue:

def foobar(): print 'hello world' print foobar.__name__ 

¿Hay algo que haga lo mismo con la función actual para mejorar la copia y el pegado de esa línea?

como el printf("%s", __func__) equivalente en C printf("%s", __func__) .

sys._getframe puede hacer eso:

 import sys def foobar(): print sys._getframe().f_code.co_name 

Una cosa que podrías intentar es crear un decorador que haga esto:

 def traceme(func): def newfunc(*args, **kwargs): ret = func(*args, **kwargs) print func.__name__ return ret return newfunc @traceme def foobar(): print 'hello world' 

Bueno, sí, hay una manera …

 print sys._getframe().f_code.co_name 

Incluso puede hacer que sea una función (obtener el nombre del marco anterior):

 def function_name(): return sys._getframe().f_back.f_code.co_name 

Ejemplo tonto solo para demostrar que funciona:

 >>> def bar(): ... return function_name() ... >>> bar() 'bar' 

(Tenga en cuenta que el decorador que se muestra en la respuesta de Krumelur es una solución mucho mejor para el problema, pero es posible hacer lo que quiera en Python =)