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

使用python中的timeit函数查找程序的计时,python,Python,我有两个不同的程序。第一个叫做prob1.py,它计算斐波那契数。第二个被称为prob2.py,它使用回忆录计算斐波那契。在名为prob3.py的第三个程序中,我试图打印prob1.py的(n,fib(n)的定时)和prob2.py的(n,fib(n)的定时),范围在(0,40)之间 问题1.py是 import sys def fib(n): if n == 0: return (1) elif n == 1: return (1) else:

我有两个不同的程序。第一个叫做prob1.py,它计算斐波那契数。第二个被称为prob2.py,它使用回忆录计算斐波那契。在名为prob3.py的第三个程序中,我试图打印prob1.py的(n,fib(n)的定时)和prob2.py的(n,fib(n)的定时),范围在(0,40)之间

问题1.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是

import sys

array = [0]*101

def MemoFib(n):
if n<=1:
    return 1
else:
    if(array[n-1]==0):
        array[n-1] = MemoFib(n-1)
    if(array[n-2]==0):
        array[n-2] = MemoFib(n-2)
    array[n] = array[n-1] + array[n-2]
    return array[n]

def main():
array = [0]*101   # clears the memo between runs
if int(sys.argv[1]) <= 100:
  print(MemoFib(int(sys.argv[1])))
else:
  print('Enter a value between 0 and 100')
main()
当您使用
Timer('fib(0,40)','from prob1 import fib')
时,您正在设置计时器,以使用两个参数调用
fib
,这将给您一个类型错误,告诉您这一点。而是在
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

看起来您是从函数本身内部调用函数。代码的缩进不正确。prob1.py和prob2.py工作得很好。prob3.py的代码可能有识别错误,但没关系。我只需要一个答案。我可以修复缩进错误。这次我得到了这个错误:文件“prob3.py”,第5行mytime=timeit.timeit(运行代码%n,'从prob1导入fib,^SyntaxError:EOL扫描字符串文字是的,我错过了一个引号,Rushy Panshal已更正错误,请现在重试另一个错误:回溯(上次最新调用):文件“prob3.py”,第5行,在mytime=timeit.timeit中(运行代码%n,'从prob1导入fib',NameError:name'timeit'未定义,然后仅在代码开头
import timeit
,我编辑了答案以反映这一点。它不再起作用:回溯(最后一次调用):文件“prob3.py”,第8行,在number=repeats中)文件“/usr/lib/python2.7/timeit.py”,第230行,在timeit返回计时器(stmt,setup,Timer).timeit(number)文件“/usr/lib/python2.7/timeit.py”中,第136行,在init code=compile(src,dummy_src_name,“exec”)文件中,第6行fib(0}^syntaxer:无效语法
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