Um recurso bacana da linguagem Python que facilita a vida um bocado e deixa o código mais legível são os Decorators. O seu uso é bem simples e sua implementação também.
Para mais informações dê uma olhada nesta página (foi a melhor referência que eu encontrei):
http://www.python.org/dev/peps/pep-0318/
Um exemplo:
import time
def imprime_tempo(func):
def decorator(*arg, **kwargs):
t1 = time.time()
result = func(*arg, **kwargs)
t2 = time.time()
print '%s levou %0.3f ms' % (func.func_name, (t2-t1)*1000.0)
return result
return decorator
@imprime_tempo
def minha_funcao(x):
print 'testando'
x = x**2
Criei este exemplo com base no que está em:
http://www.daniweb.com/code/snippet368.html
Outro link:
http://www.phyast.pitt.edu/~micheles/python/documentation.html
Neste site são apresentados alguns problemas no uso de Decorators (basicamente a alteração da assinatura da função) e uma solução para o problema