我有一个测量其他功能持续时间并将其保存在特定文件中的功能:
def timeandsave(n, function, some_list, index=0):
start=0
gen(n, some_list)
start = time.time()
function(some_list)
end = time.time() - start
print 'Time: ' + str(end)
plik = open('Sort' + str(n) + '_ind' + str(index) + '_result.txt', 'a')
plik.write(str(end) + '\n')
plik.close()
return end
现在我正在使用例如:
timeandsave(10000, quick_sort_r, list, 1)
答案是对的:
Time: 0.166000127792
但是当我想在循环中使用它几次时,它会打印并保存一些结果:
Input:
for i in range(0, 5):
timeandsave(10000, quick_sort_r, list, 1)
Output:
Time: 0.173000097275
Time: 0.375999927521
Time: 0.577000141144
Time: 0.772000074387
Time: 0.962000131607
有什么建议吗?
答案 0 :(得分:1)
首先看一下这个链接:http://docs.python.org/2/library/timeit.html
现在为您的代码:
在主程序中,您将列表作为参数传递,这被分配给some_list,它是参数的一部分。现在,如果你修改some_list;偶数列表将被修改。
最有可能当你使用gen()时,你正在修改some_list的大小,反过来修改' list'本身。
当您将列表传递给some_copy时,请先执行深层复制或使用元组而不是列表。 (推荐后者)。
def timeandsave(n, function, some_list, index=0):
start=0
my_list = copy.deepcopy(some_list)
gen(n, my_list)
#etc logic
return end
def timeandsave(n, function, some_tuple, index=0):
start=0
#etc logic
答案 1 :(得分:0)
timeandsave 会返回执行该功能所需的时间,因此您可以使用它来查找平均值:
def runTrials(trials, n, func, list):
total= 0.0
for _ in range(trials):
total+= timeandsave(n, func, list, 1)
average= total/ trials
file= open('AVERAGES.txt', 'a')
file.write('Trials: '+str(trials)+ ', average: '+ str(average))
如果您使用的是python 2,将 range()替换为 xrange(),则会减少内存使用量。另请参阅python的 timeit 模块。