Hay ocasiones en las que ejecutamos funciones una y otra vez con los mismos parámetros. Si esas funciones son operaciones matemáticas o accesos a bases de datos pueden llegar a tener un coste computacional o un tiempo de ejecución demasiado elevado.
¿Y si añadimos una caché a nuestra función? En el caso de Python es muy sencillo de hacer. Basta con usar el parámetro _cache en la función. Se trata de una variable que se declara en el momento de la creación de la función y no dejará de existir hasta que la función llegue al final de su vida.
La variable _cache es un diccionario donde podremos almacenar cualquier dato. Para tenerla disponible en nuestra función basta con definirla entre los parámetros de nuestra función, así:
def mi_funcion(p1, p2, p3, ..., _cache={}):
# código de mi función
...
Sencillo ¿no? ¿Esto para qué sirve? Para evitar tener que calcular algunos valores varias veces. Especialmente cuando son cáculos complejos podemos ahorrarnos algún tiempo.
Por ejemplo, la función a continuación devuelve la suma de mil veces la raiz cuadrada del número pasado por parámetro (la he calculado 1000 veces para que el coste sea mayor). Pero sólo la calcula la primera vez.
from math import sqrt
def my_sqrt(n, _cache={}):
if not _cache.has_key(n):
total = 0
for i in range(1000):
total = sqrt(n) + total
_cache[n] = total
return _cache[n]
¿Cuál es el resultado? Si medimos el tiempo de ejecución de esa función 2 veces seguidas el resultado es el siguiente:
>>> my_sqrt(200)
Tiempo: 0.000513
14142.135623731116
>>> my_sqrt(200)
Tiempo: 5.99999999995e-06
14142.135623731116
Obviamente el resultado es el mismo. Pero podemos observar que el tiempo de ejecucuión la segunda vez es unas 100 veces menor. Este es tan sólo un ejemplo tonto. En el caso de acceso de bases de datos la mejora puede ser mucho mayor (y nos ahorramos sobrecargarla).
Y ya está. ¡Espero que os haya gustado!
Muy útil! Gracias Álvaro 😉
Me gustaMe gusta
¡De nada!
Me gustaMe gusta