Quando eseguo il debug, mi piace stampare tutti gli input e gli output di una funzione (so che ho bisogno di un IDE migliore, ma umorami, questo potrebbe essere usato per la segnalazione degli errori). Quindi, preferirei avere:Come scriveresti un decoratore @debuggable in python?
@debuggable
def myfunc(argA,argB,argC):
return argB+1
e utilizzare una variabile globale per attivare o disattivare il debug. No, non ti piacciono neanche i globali, immaginai.
Il meglio che posso venire in mente è:
DEBUG = True
def debuggable(func):
if DEBUG:
def decorated(*args):
print "Entering ",func.func_name
print " args ",args
ret = func(*args)
print ret
return ret
return decorated
else:
return func
@debuggable
def myfunc(this,that):
return this+that
e funzionante:
>>> myfunc(1,3)
Entering myfunc
args (1, 3)
4
Come posso migliorare questo?
C'è un post piuttosto lungo sul tema di decoratori di tracing a [Word Aligned] (http://wordaligned.org/articles/echo). –