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程序设计有所帮助。