Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # decoradores.py
- #
- import functools
- import time
- def decorador(funcion):
- # Plantilla estandar para construir decoradores
- @functools.wraps(funcion)
- def wrapper_decorador(*args, **kwargs):
- # hace algo antes
- valor = funcion(*args, **kwargs)
- # hacer algo despues
- return valor
- return wrapper_decorador
- def duplicar_borrador(funcion):
- def wrapper_duplicar():
- funcion()
- funcion()
- return wrapper_duplicar
- def duplicar(funcion):
- def wrapper_duplicar(*args, **kwargs):
- funcion(*args, **kwargs)
- funcion(*args, **kwargs)
- return wrapper_duplicar
- def debug(funcion):
- """Imprime la firma de la función y su valor de retorno"""
- @functools.wraps(funcion)
- def wrapper_debug(*args, **kwargs):
- # creo una lista de argumentos posicionales de la función
- args_repr = [repr(a) for a in args]
- # creo una lista de argumentos keywords
- kwargs_repr = [f"{k} = {w}" for k,v in kwargs.items()]
- # unimos los argumentos con la firma
- firma = ",".join(args_repr + kwargs_repr)
- print(f"Llamando a la función {funcion.__name__}({firma})")
- valor = funcion(*args, **kwargs)
- print(f"La función {funcion.__name__} devolvió {valor}")
- return valor
- return wrapper_debug
- def timer(funcion):
- """Imprime el tiempo de ejecuciòn de la función decorada"""
- @functools.wraps(funcion)
- def wrapper_timer(*args, **kwargs):
- # almacena el instante inicial
- start_time = time.perf_counter()
- valor = funcion(*args, **kwargs)
- # almacena el instante final
- end_time = time.perf_counter()
- run_time = end_time - start_time
- print(f"tiempo de ejecución: '{funcion.__name__}' en {run_time:.4f} segundos")
- return valor
- return wrapper_timer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement