python运行时间的几种方法
最早见过手写的,类似于下面这种:
importdatetime deftime_1(): begin=datetime.datetime.now() sum=0 foriinxrange(10000000): sum=sum+i end=datetime.datetime.now() returnend-begin printtime_1()
输出如下:
➜ Pythonpythontime_1.py
0:00:00.280797
另外一种方法是使用timeit模块,使用方法如下:
In[5]:importtimeit In[6]:timeit.timeit("sum(range(100))") Out[6]:1.2272648811340332
还可以在命令行上使用这种timeit模块,如下:
➜Pythonpython-mtimeit-s"importtime_1ast""t.time_1()" 0:00:00.282044 10loops,bestof3:279msecperloop
注意:timeit模块会多次运行程序以获得更精确的时间,所以需要避免重复执行带来的影响。比方说x.sort()这种操作,因为第一次执行之后,后边已经是排好的了,准确性就收到了影响。
还有一种方法是使用cProfile模块,代码如下,名字为time_1.py:
importdatetime deftime_1(): begin=datetime.datetime.now() sum=0 foriinxrange(10000000): sum=sum+i end=datetime.datetime.now() returnend-begin if__name__=='__main__': printtime_1() importcProfile cProfile.run('time_1()')
运行程序结果如下:
➜Pythonpythontime_1.py 0:00:00.282828 2functioncallsin0.000seconds Orderedby:standardname ncallstottimepercallcumtimepercallfilename:lineno(function) 10.0000.0000.0000.000<string>:1(<module>) 10.0000.0000.0000.000{method'disable'of'_lsprof.Profiler'objects} Traceback(mostrecentcalllast): File"time_1.py",line15,in<module> cProfile.run('main()') File"/usr/lib/python2.7/cProfile.py",line29,inrun prof=prof.run(statement) File"/usr/lib/python2.7/cProfile.py",line135,inrun returnself.runctx(cmd,dict,dict) File"/usr/lib/python2.7/cProfile.py",line140,inrunctx execcmdinglobals,locals File"<string>",line1,in<module> NameError:name'main'isnotdefined ➜Pythonvitime_1.py ➜Pythonpythontime_1.py 0:00:00.284642 5functioncallsin0.281seconds Orderedby:standardname ncallstottimepercallcumtimepercallfilename:lineno(function) 10.0000.0000.2810.281<string>:1(<module>) 10.2810.2810.2810.281time_1.py:3(time_1) 20.0000.0000.0000.000{built-inmethodnow} 10.0000.0000.0000.000{method'disable'of'_lsprof.Profiler'objects}
一开始代码里最后一行写的是cProfile.run('main()'),提示没有main(),将main()改成函数名字就可以了。
以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。