Домашнее задание №3

Время чтения: меньше 5 мин

1. Задача на декоратор с кешированием результата.

Секция статьи "1. Задача на декоратор с кешированием результата."

Напишите функцию-декоратор, которая сохранит (закэширует) значение декорируемой функции multiplier (Чистая функция). Если декорируемая функция будет вызвана повторно с теми же параметрами — декоратор должен вернуть сохранённый результат, не выполняя функцию.

В качестве структуры для кэша, можете использовать словарь в Python.

*В качестве задания со звездочкой можете использовать вместо Python-словаря => Redis.

Основа:

        
          
          def multiplier(number: int):    return number * 2
          def multiplier(number: int):
    return number * 2

        
        
          
        
      

2. Задача на декоратор с параметрами.

Секция статьи "2. Задача на декоратор с параметрами."

Надо написать декоратор для повторного выполнения декорируемой функции через некоторое время. Использует наивный экспоненциальный рост времени повтора (factor) до граничного времени ожидания (border_sleep_time).

В качестве параметров декоратор будет получать:

  • call_count - число, описывающее кол-во раз запуска функций;
  • start_sleep_time - начальное время повтора;
  • factor - во сколько раз нужно увеличить время ожидания;
  • border_sleep_time - граничное время ожидания.

Формула:

t = start_sleep_time * 2^(n) if t < border_sleep_time
t = border_sleep_time if t >= border_sleep_time

Ожидаемый результат:

Кол-во запусков = call_count (допустим 3)
Начало работы
Запуск номер 1. Ожидание: t секунд. Результат декорируемой функций = func_result.
Запуск номер 2. Ожидание: t секунд. Результат декорируемой функций = func_result.
...
Конец работы