🏠 Домашнее задание

⚡ Суть задания

Шесть задач на декораторы из практической работы: обрезка строк, параметризованные декораторы, кэширование, ограниченный кэш, логирование вызовов и проверка типов аргументов.

Результат: шесть рабочих скриптов, которые можно запустить в VS Code.

📋 Исходное задание из LMS

Практическая работа — Практикум 16

  1. Ограничение длины строки. Создайте декоратор limit_output(max_len), который обрезает строку, возвращаемую функцией, до max_len символов. Если строка длиннее, то она обрезается до выбранного лимита и завершается троеточием ..., входящим в этот лимит.
  2. Ограничение с указанием длины строки. Доработайте декоратор limit_output, чтобы он принимал параметр max_len — максимальная длина строки.
  3. Кеширование результатов. Создайте декоратор cache, который сохраняет результат вызова функции для каждого набора аргументов. Если функция вызывается повторно с теми же аргументами — возвращается сохранённый результат.
  4. Кеш с ограничением по размеру. Доработайте декоратор cache, чтобы он принимал параметр max_size, ограничивающий количество сохранённых записей, и при превышении max_size удалял самую старую запись из кэша.
  5. Журнал вызовов функции. Создайте декоратор log_to_file, который будет записывать в файл все вызовы функции с её аргументами и результатом. Лог сохраняется в файл call_log.log, каждый вызов — на новой строке.
  6. Проверка типов аргументов по порядку. Создайте декоратор accepts_types, который проверяет, что позиционные аргументы функции соответствуют указанным типам. Если тип хотя бы одного аргумента не совпадает — должна быть выброшена ошибка TypeError с указанием ожидаемого и полученного типа.

🔧 Подготовка окружения

  1. Создайте папку python-fundamentals-practice/lesson-65/.
  2. Создайте файлы:
    • homework_01_limit_output.py
    • homework_02_limit_output_param.py
    • homework_03_cache.py
    • homework_04_cache_limited.py
    • homework_05_log_to_file.py
    • homework_06_accepts_types.py
  3. Скопируйте в каждый файл соответствующее полное решение из раздела Решения.

🧪 Как проверить решение

  1. Активируйте venv: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  2. Запустите скрипты:
    • python homework_01_limit_output.py
    • python homework_02_limit_output_param.py
    • python homework_03_cache.py
    • python homework_04_cache_limited.py
    • python homework_05_log_to_file.py
    • python homework_06_accepts_types.py
  3. Убедитесь, что вывод совпадает с примерами из заданий.
  4. Для задания 5 проверьте, что появился файл call_log.log с тремя строками.

💡 Советы и типичные ошибки

  • В заданиях 1 и 2 троеточие занимает 3 символа из общего лимита: result[:max_len - 3] + "...".
  • В задании 2 не забудьте тройную вложенность для параметризованного декоратора.
  • В задании 4 используйте OrderedDict, чтобы иметь метод move_to_end для обновления порядка.
  • В задании 5 logging.basicConfig вызывается один раз в начале скрипта; последующие вызовы игнорируются.
  • В задании 6 проверяйте тип через isinstance, а не через type().
Проверить по документации: для промышленного кэширования и логирования изучите functools.lru_cache и именованные логгеры в модуле logging.