Почему не работает декоратор для подсчета времени работы функции?

Есть написанный алгоритм быстрой сортировки, который отдельно от декоратора работает. Но в отличии от других сортировок(вставками, пузырьком, выбором), для него результат нужно поместить в отдельную переменную, так как он, в отличии от других сортировок, не меняет список который указан в качестве аргумента. Это я понимаю) Есть декоратор для подсчета времени который работает с другими сортировками которые выше перечислены. Понимаю что дело в том, что быстрая сортировка не изменяет список полученный в качестве аргумента. Но что нужно изменить в функции или декораторе, чтобы он вычислил время работы функции?

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 шт):

Автор решения: CrazyElf

Ваш декоратор не возвращает результат работы функции, которую он оборачивает, поэтому выходит 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
→ Ссылка