利用python中的timeit函数查找程序的计时

2024-10-01 22:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有不同的节目。第一个叫做prob1.py,它计算斐波纳契数。第二个是prob2.py,它使用记忆来计算斐波纳契。在第三个名为prob3.py的程序中,我试图打印出prob1.py的(n,fib(n)的计时)和prob2.py的(n,MemoFib(n)的计时)范围在(0,40)之间。在

prob1.py是

import sys

def fib(n):
   if n == 0:
     return (1)
   elif n == 1:
     return (1)
   else:
     return fib(n-1)+fib(n-2)

def main():
result = int(sys.argv[1])
print(fib(result))
main()

prob2.py是

^{pr2}$

我有下面的代码调用这两个程序,打印出我需要的东西,但我不能适应我的代码。你能修好它吗?如果以下代码不起作用,我也可以使用其他代码。我只需要使用timeit函数打印出(n,Fib(n))和(n,MemoFib(n))。在

mytime = timeit.Timer( 'fib(0,40)', 'from prob1 import fib' )
delta = mytime.timeit( 40 )
print "40 runs of fib( 1000000 ) took: " + str( delta ) + " seconds."
print ''

setupStr = 'from prob1 import fib'
setupStr += '; import anotherFile'
mytime = timeit.Timer( 'list_concat( anotherFile.a, anotherFile.b)',     setupStr )
print 'calling list_concat from cell.py on a, b, from foo.py:'
delta = mytime.timeit( 5 )
print "1 run of MemoFib( a, b ) took: " + str( delta ) + " seconds."

Tags: 代码frompyimportreturndeltaprintfib
1条回答
网友
1楼 · 发布于 2024-10-01 22:25:38

当您使用Timer('fib(0,40)', 'from prob1 import fib')时,您正在设置计时器,用两个参数调用{},这将给您一个TypeError,告诉您这一点。而是在prob3.py中的for循环中运行计时器

编辑-我现在已经测试过了,知道它可以执行。在

import timeit

repeats = 100
run_code = 'fib(%d)' # formatting mark to enter each time
for n in range(40):
    # you can just call the .timeit() function from the module
    mytime = timeit.timeit(run_code % n, 'from prob1 import fib', number=repeats)
    print ("fib(%d) repeated %d times took %f seconds"%(n,repeats,mytime))

# similar for other one

相关问题 更多 >

    热门问题