📋 Исходное задание из LMS
Практическая работа — Практикум 16
- Ограничение длины строки. Создайте декоратор
limit_output(max_len), который обрезает строку, возвращаемую функцией, доmax_lenсимволов. Если строка длиннее, то она обрезается до выбранного лимита и завершается троеточием..., входящим в этот лимит. - Ограничение с указанием длины строки. Доработайте декоратор
limit_output, чтобы он принимал параметрmax_len— максимальная длина строки. - Кеширование результатов. Создайте декоратор
cache, который сохраняет результат вызова функции для каждого набора аргументов. Если функция вызывается повторно с теми же аргументами — возвращается сохранённый результат. - Кеш с ограничением по размеру. Доработайте декоратор
cache, чтобы он принимал параметрmax_size, ограничивающий количество сохранённых записей, и при превышенииmax_sizeудалял самую старую запись из кэша. - Журнал вызовов функции. Создайте декоратор
log_to_file, который будет записывать в файл все вызовы функции с её аргументами и результатом. Лог сохраняется в файлcall_log.log, каждый вызов — на новой строке. - Проверка типов аргументов по порядку. Создайте декоратор
accepts_types, который проверяет, что позиционные аргументы функции соответствуют указанным типам. Если тип хотя бы одного аргумента не совпадает — должна быть выброшена ошибкаTypeErrorс указанием ожидаемого и полученного типа.
🔧 Подготовка окружения
- Создайте папку
python-fundamentals-practice/lesson-65/. - Создайте файлы:
homework_01_limit_output.pyhomework_02_limit_output_param.pyhomework_03_cache.pyhomework_04_cache_limited.pyhomework_05_log_to_file.pyhomework_06_accepts_types.py
- Скопируйте в каждый файл соответствующее полное решение из раздела Решения.
🧪 Как проверить решение
- Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите скрипты:
python homework_01_limit_output.pypython homework_02_limit_output_param.pypython homework_03_cache.pypython homework_04_cache_limited.pypython homework_05_log_to_file.pypython homework_06_accepts_types.py
- Убедитесь, что вывод совпадает с примерами из заданий.
- Для задания 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.