Exemplo de uso:
@print_performancedef minha_funcao(): pass
Implementação:
try: from functools import wrapsexcept ImportError: # Python 2.3, 2.4 fallback. from django.utils.functional import wrapsimport timedef print_performance(function): def wrapped_function(*args, **kwargs): print('START %s(%s)' % (function.__name__, args,)) start_time = time.clock() exception = None try: result = function(*args, **kwargs) except Exception, e: exception = e end_time = time.clock() if exception: print('END-ERROR %s(%s): %ss' % (function.__name__, args, str(end_time - start_time))) raise exception print('END %s(%s): %ss' % (function.__name__, args, str(end_time - start_time))) return result return wraps(function)(wrapped_function)
Sim, decorators são bem legais mesmo! No passado escrevi isto a respeito: http://blog.paulojeronimo.com/2009/04/o-do-phyton-parece-com-o-do-java-mas.html
ReplyDelete[]s,
PJ
Bacana, vou ver lá! Alias, fiz umas atualizações no código, só melhorando um pouco as strings do print para ajudar no debug. abs!
ReplyDelete