Почему не работает декоратор для подсчета времени работы функции?
Есть написанный алгоритм быстрой сортировки, который отдельно от декоратора работает. Но в отличии от других сортировок(вставками, пузырьком, выбором), для него результат нужно поместить в отдельную переменную, так как он, в отличии от других сортировок, не меняет список который указан в качестве аргумента. Это я понимаю) Есть декоратор для подсчета времени который работает с другими сортировками которые выше перечислены. Понимаю что дело в том, что быстрая сортировка не изменяет список полученный в качестве аргумента. Но что нужно изменить в функции или декораторе, чтобы он вычислил время работы функции?
from time import *
from random import *
def check_time(algorithm):
def count_time(*args):
start_time = time()
algorithm(*args)
end_time = time() - start_time
print(f' Время работы алгоритма: {end_time} секунд')
return count_time
@check_time
def quick_sort(A):
if len(A) < 2:
return A
else:
middle = A[0]
less = [i for i in A[1:] if i <= middle]
high = [i for i in A[1:] if i > middle]
return quick_sort(less) + [middle] + quick_sort(high)
a = [randint(-100, 100) for i in range(300)]
quick_sort(a)
Выдает ошибку: TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'
Ответы (1 шт):
Ваш декоратор не возвращает результат работы функции, которую он оборачивает, поэтому выходит None и всё ломается при попытке сложить результат работы функции с другими списками. Нужно возвращать результат:
def check_time(algorithm):
def count_time(*args):
start_time = time()
result = algorithm(*args) # <-- запомним результат
end_time = time() - start_time
print(f' Время работы алгоритма: {end_time} секунд')
return result # <-- вернём результат
return count_time