测试命令运行时间:timeit和profile

先说timeit

from timeit import Timer
def test1():
    n=0
    for i in range(101):
        n+=i
    return n

def test2():
    return sum(range(101))

def test3():
    return sum(x for x in range(101))

if __name__=='__main__':
    t1=Timer("test1()","from __main__ import test1")
    t2=Timer("test2()","from __main__ import test2")
    t3=Timer("test3()","from __main__ import test3")
    print(t1.timeit(100000))
    # 或者
    # import timeit
    # print(timeit.timeit('test1()',"from __main__ import test1",number=100000))
    print(t2.timeit(10000))
    print(t3.timeit(10000))
    print(t1.repeat(3, 10000))
    print(t2.repeat(3, 10000))
    print(t3.repeat(3, 10000))

  

 输出结果:

结果说明:

t1=Timer("test1()","from __main__ import test1")是创建一个对象。第一个参数是要执行的语句,第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。

t1.timeit(100000) 参数是一个测试里,将命令执行100000

t1.repeat(3, 10000)第一个参数表示测试几次,第二个参数表示每次测试中执行重复多少次。

 详细参考:

http://blog.csdn.net/huludan/article/details/43935873

再说profile

def foo():
    sum = 0
    for i in range(10000000):
        sum += i
    return sum
if __name__ == "__main__":
       import profile
       profile.run("foo();foo()")

  

输出结果:

结果说明:

       profile的统计结果分为ncalls, tottime, percall, cumtime, percall, filename:lineno(function)等若干列:
ncalls
函数的被调用次数
tottime
函数总计运行时间,除去函数中调用的函数运行时间
percall
函数运行一次的平均时间,等于tottime/ncalls
cumtime
函数总计运行时间,含调用的函数运行时间
percall
函数运行一次的平均时间,等于cumtime/ncalls
filename:lineno(function)
函数所在的文件名,函数的行号,函数名

详细参考:http://blog.csdn.net/gzlaiyonghao/article/details/1483728

原文地址:https://www.cnblogs.com/andy9468/p/8432680.html