Después de ver cómo funcionan las anotaciones en Java, pasaremos a ver cómo funcionan las anotaciones en python. Al ser un lenguaje menos estricto, python permite definir las anotaciones de forma más directa.
Por ejemplo, si queremos que nos avise con un print cada vez que ejecutemos ciertas funciones, no tenemos más que definir una interfaz que imprima el log que queremos antes de ejecutar la función:
from functools import wraps def log(func): @wraps(func) def log_func(*args, **kwargs): print "log" return func(*args, **kwargs) return log_func @log def func1(): print "Ejecutando funcion uno" @log def func2(): print "Ejecutando funcion uno" func1() func2()
Este código devolvería el siguiente resultado:
log Ejecutando función uno log Ejecutando función dos
También podemos usar las anotaciones para cosas más útiles, como indicar a python que cierta función se va a ejecutar en modo asíncrono en un hilo diferente:
from multiprocessing import process def run_async(func): @wraps(func) def async_func(*args, **kwargs): func_hl = Process(target = func, args = args, kwargs = kwargs) func_hl.start() return func_hl return async_func @run_async def process(): print "Ejecutado en asíncrono"