18 lines
1.7 KiB
Markdown
18 lines
1.7 KiB
Markdown
### Задача 6. Декораторы и время выполнения (Декораторы, Функции высшего порядка)
|
|
|
|
Напишите программу с декораторами для измерения производительности:
|
|
|
|
1. `timer(func)` — декоратор, который измеряет время выполнения функции. Выводит: *"Функция {название} выполнилась за {время} секунд"*. Используйте `time.time()`.
|
|
|
|
2. `repeat(n)` — декоратор с параметром, который запускает функцию `n` раз подряд и возвращает список результатов.
|
|
|
|
3. `cache_result(func)` — декоратор, который кэширует результат функции. Если функция вызывается с теми же аргументами, возвращает закэшированный результат, не выполняя функцию повторно. Используйте словарь для хранения кэша.
|
|
|
|
**Тесты:**
|
|
|
|
1. Создайте функцию `slow_calculation(x)`, которая делает `time.sleep(1)` и возвращает `x * 2`
|
|
2. Примените к ней декоратор `@timer`
|
|
3. Создайте функцию `fibonacci(n)` (рекурсивная) и примените `@cache_result`
|
|
4. Вызовите `fibonacci(35)` дважды и убедитесь, что второй раз выполняется мгновенно
|
|
5. Создайте функцию с декоратором `@repeat(3)` и проверьте, что она выполнилась 3 раза
|