Python timeit: NameError при сравнении нескольких функций в качестве аргументов функции процедуры timeit - PullRequest
0 голосов
/ 17 мая 2018

Я хочу проверить различные алгоритмы сортировки и их скорость.Все функции алгоритма выглядят так:

def quicksort(arg1):
   ...
   return result

def heapsort(arg1):
   ...
   return result

, где аргумент представляет собой список чисел.Я хочу рассчитать эти алгоритмы для разных входных длин, чтобы получить график.Поэтому я написал тестовую функцию, которая получает алгоритм в качестве параметра и тестирует этот алгоритм с различной длиной ввода.

def measure_algorithm(tests, algorithm):
   results = []
   for i in range(len(tests)):
      result = %timeit -n 100 -r 3 -o (algorithm(tests[i]))
      results.append(result.best)

   return results

Код, вызывающий эту функцию, выглядит примерно так:

unsorted_list = [1, 3, 2, 9, 7, 5, 0, ...]
lengths = [10, 50, 100, 500, ...]
tests = []
for i in range(len(lengths)):
   tests.append(unsorted_list[:lengths[i]])

heapsort_times = measure_algorithm(tests, heapsort)
quicksort_times = measure_algorithm(tests, quicksort)
...

Но теперь я получаю

NameError: name 'algorithm' is not defined

Я работаю с Python 3 и IPythonЗаписная книжка.

Что я делаю не так?

...