Бывают случаи, когда мы выполняем функции снова и снова с одними и теми же параметрами.
Если эти функции представляют собой математические операции или обращение к базе данных, они могут потребовать слишком больших вычислительных затрат или времени выполнения.
Что если мы добавим кэш в нашу функцию?
В Python это сделать очень просто.
Для этого в функции достаточно использовать параметр _cache.
Это переменная, которая объявляется при создании функции и не прекращает свое существование до тех пор, пока функция не завершит свое выполнение.
Переменная _cache – это словарь, в котором мы можем хранить любые данные.
Чтобы он был доступен в нашей функции, просто определите его среди ее параметров, например, так:
def my_funcion(p1, p2, p3, ..., _cache={}):
# код функции
...
Code language: PHP (php)
Просто, не так ли?
Зачем это нужно? Чтобы избежать необходимости вычислять определенные значения несколько раз.
Особенно если речь идет о сложных расчетах.
Например, приведенная ниже функция возвращает сумму тысячекратно умноженную на квадратный корень из числа, переданного параметром (я вычислил его 1000 раз, чтобы затраты были выше).
Но он рассчитывает его только в первый раз.
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]
Code language: JavaScript (javascript)
Если мы измерим время выполнения этой функции 2 раза, то результат будет следующим:
>>> my_sqrt(200)
Время: 0.000513
14142.135623731116
>>> my_sqrt(200)
Время: 5.99999999995e-06
14142.135623731116
Code language: CSS (css)
Результат одинаковый. Но мы можем заметить, что время выполнения во второй раз примерно в 100 раз меньше.
В случае доступа к базе данных улучшение может быть существеннее.