Necesito saber el número de llamadas a una cierta función

Chema Cortes py en ch3m4.org
Mar Nov 29 09:47:34 CET 2005


Carlos Mestre escribió:
> Perdon, no sé a lo que te refieres, yo quería otra cosa. ejemplo,
> definir la función factorial en lisp, y utilizando el comando trace
> (trace factorial), luego cuando hago esto:
> Break 3 [6]> (factorial 6)
> 1. Trace: (FACTORIAL '6)
> 2. Trace: (FACTORIAL '5)
> 3. Trace: (FACTORIAL '4)
> 4. Trace: (FACTORIAL '3)
> 5. Trace: (FACTORIAL '2)
> 6. Trace: (FACTORIAL '1)
> 7. Trace: (FACTORIAL '0)
> 7. Trace: FACTORIAL ==> 1
> 6. Trace: FACTORIAL ==> 1
> 5. Trace: FACTORIAL ==> 2
> 4. Trace: FACTORIAL ==> 6
> 3. Trace: FACTORIAL ==> 24
> 2. Trace: FACTORIAL ==> 120
> 1. Trace: FACTORIAL ==> 720
> 
> no sé si se me entiende :-/

Como te sugiere Erny en otro mensaje, se puede utilizar el módulo
'profile' para estas cosas.

Es lo primero que se había ocurrido; pero pensando veo que también se
puede hacer muy simple con "decoradores":


#Decorador genérico para traceos
def mytrace(f):
    def wr_f(*args):
        s=','.join([str(item) for item in args])
        print "--> %s(%s)"% (f.__name__,s)
        res=f(*args)
        print "%s(%s) ==> %s"%(f.__name__,s,str(res))
        return res
    return wr_f

@mytrace
def fact(n):
    if n==0:
        return 1
    else:
        return n*fact(n-1)

print fact(3,2)



El decorador 'mytrace' se puede aplicar delante de cada función que
quieras tracear.




Más información sobre la lista de distribución Python-es