Для измерения времени выполнения функции с помощью декоратора в Python можно использовать модуль time. Декоратор запоминает время перед вызовом функции, вызывает функцию, затем запоминает время после выполнения и вычисляет разницу. Ниже пример кода:
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
execution_time = end_time - start_time
print(f"Функция {func.__name__} выполнилась за {execution_time:.4f} сек")
return result
return wrapper
@timer
def my_function():
time.sleep(2) # Имитация работы функции
my_function()
Этот декоратор выведет время выполнения функции my_function.
Чтобы измерить время выполнения функции с помощью декоратора в Python, можно создать декоратор, который записывает время до и после вызова функции и вычисляет разницу.
Вот пример реализации:
import time
from functools import wraps
def timer(func):
"""Декоратор для измерения времени выполнения функции."""
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time() # Время начала выполнения функции
result = func(*args, **kwargs) # Вызов декорируемой функции
end_time = time.time() # Время окончания выполнения функции
execution_time = end_time - start_time # Время выполнения
print(f"Функция {func.__name__} выполнилась за {execution_time:.4f} секунд")
return result
return wrapper
Разберем код:
import time: Импортирует модуль time, необходимый для получения текущего времени.from functools import wraps: Импортирует wraps из модуля functools. Он помогает сохранять метаданные декорируемой функции (например, имя и docstring).def timer(func):: Определяет декоратор timer, который принимает функцию func в качестве аргумента.@wraps(func): Декоратор wraps применяется к внутренней функции wrapper.def wrapper(*args, **kwargs):: Определяет внутреннюю функцию wrapper, которая принимает произвольное количество позиционных и именованных аргументов. Именно эта функция будет выполняться при вызове декорированной функции.start_time = time.time(): Записывает текущее время перед вызовом функции.result = func(*args, **kwargs): Вызывает декорируемую функцию с переданными аргументами и сохраняет результат.end_time = time.time(): Записывает текущее время после вызова функции.execution_time = end_time - start_time: Вычисляет время выполнения функции.print(f"Функция {func.__name__} выполнилась за {execution_time:.4f} секунд"): Выводит время выполнения в консоль, форматируя его до 4 знаков после запятой. func.__name__ предоставляет имя исходной декорируемой функции.return result: Возвращает результат, полученный от вызова декорируемой функции.return wrapper: Возвращает внутреннюю функцию wrapper, которая заменяет исходную функцию.Пример использования:
@timer
def my_slow_function(n):
"""Пример медленной функции."""
time.sleep(n)
return n * 2
result = my_slow_function(2)
print(f"Результат: {result}")
В этом примере, @timer применяется к функции my_slow_function. Когда my_slow_function(2) вызывается, декоратор timer измеряет время ее выполнения и выводит его в консоль, а также возвращает результат функции. Output будет включать время выполнения и возвращаемый результат.