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