先说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