Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: timing, function, wrapper

Как реализовать декоратор, который логгирует время выполнения функции?

Этот вопрос проверяет умение применить декораторы на практике, а также знание модуля time или time.perf_counter.

Короткий ответ

Чтобы создать такой декоратор, нужно измерить время начала выполнения функции и время окончания, а затем вычислить разницу. Декоратор должен вернуть обёртку, которая делает измерения, вызывает исходную функцию и выводит время выполнения. Обычно используют time.perf_counter() для наиболее точных измерений. Такой декоратор помогает анализировать производительность функций.

Длинный ответ

1. Идея тайминг-декоратора

Чтобы логировать время выполнения, нужно:

  • перед вызовом функции записать текущее время;

  • вызвать функцию;

  • записать время окончания;

  • вывести разницу.

Это классическая задача для декоратора.

1.1. Реализация

Python

import time
from functools import wraps

def timeit(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        duration = time.perf_counter() - start
        print(f"{func.__name__} took {duration:.6f} seconds")
        return result
    return wrapper

1.2. Использование

Python

@timeit
def slow():
    time.sleep(0.2)

slow()

Вывод:

slow took 0.2001 seconds

1.3. Важные детали

  • time.perf_counter() — лучший выбор для измерений производительности.

  • @wraps(func) сохраняет имя и докстроку функции.

  • Такой декоратор удобно расширять: логировать в файл, отправлять метрики, накапливать статистику.

1.4. Где применяется

  • профилирование частей кода;

  • измерение производительности API-методов;

  • анализ узких мест;

  • логирование медленных операций (SQL-запросов, внешних API).

Краткий вывод

Тайминг-декоратор замеряет время до и после вызова функции, выводит разницу и позволяет легко измерять производительность без изменения основной логики.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#timing

#function

#wrapper

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.