2016-09-23 5 views
-1

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

import time 
import random 
import timeit 
import functools 

def ListGenerator(rangeStart,rangeEnd,lenth): 
sampleList = random.sample(range(rangeStart,rangeEnd),lenth) 
return sampleList 


def timeit(func): 
    @functools.wraps(func) 
    def newfunc(*args): 
     startTime = time.time() 
     func(*args) 
     elapsedTime = time.time() - startTime 
     print('function [{}] finished in {} ms'.format(
      func.__name__, int(elapsedTime * 1000))) 
    return newfunc 

@timeit 
def bubbleSort(NumList): 
    compCount,copyCount= 0,0 

    for currentRange in range(len(NumList)-1,0,-1): 
     for i in range(currentRange): 
      compCount += 1 
      if NumList[i] > NumList[i+1]: 
       temp = NumList[i] 
       NumList[i] = NumList[i+1] 
       NumList[i+1] = temp 
    # print("Number of comparisons:",compCount) 



NumList = ListGenerator(1,200,10) 
print("Before running through soriting algorithm\n",NumList) 
print("\nAfter running through soriting algorithm") 
bubbleSort(NumList) 
print(NumList,"\n") 
for i in range (0, 10, ++1): 
print("\n>Test run:",i+1) 
bubbleSort(NumList) 
compCount = ((len(NumList))*((len(NumList))-1))/2 
print("Number of comparisons:",compCount) 

время работы снимок экрана enter image description here

+0

У вас есть 'timeit' как модуль и как имя декоратора. Это нормально? –

+0

Да, я изменил имя декоратора и снова запустил его. ошибка все еще существует:/@vishes_shell –

+1

Просто запустите 'bubbleSort (список (диапазон (10000)))' –

ответ

0

Похоже, что код просто выполняет невероятно быстро. В bubbleSort, я добавил дополнительный for цикл для выполнения сравнений еще раз 10000:

@timeit 
def bubbleSort(NumList): 
    compCount,copyCount= 0,0 

    for i in range(10000): 
     for currentRange in range(len(NumList)-1,0,-1): 
      for i in range(currentRange): 
       compCount += 1 
       if NumList[i] > NumList[i+1]: 
        temp = NumList[i] 
        NumList[i] = NumList[i+1] 
        NumList[i+1] = temp 

И теперь результат:

('Before running through soriting algorithm\n', [30, 18, 144, 28, 155, 183, 50, 101, 156, 26]) 

After running through soriting algorithm 
function [bubbleSort] finished in 12 ms 
([18, 26, 28, 30, 50, 101, 144, 155, 156, 183], '\n') 
('\n>Test run:', 1) 
function [bubbleSort] finished in 12 ms 
('Number of comparisons:', 45) 
('\n>Test run:', 2) 
function [bubbleSort] finished in 8 ms 
('Number of comparisons:', 45) 
('\n>Test run:', 3) 

... и т.д. @vishes_shell это указывает в комментариях, а также ,

+1

Эй, спасибо alot :) –