Для измерения времени выполнения функции с помощью декоратора в 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 будет включать время выполнения и возвращаемый результат.