python性能分析(一)——使用timeit给你的程序打个表吧
前言
我们可以通过查看程序核心算法的代码,得知核心算法的渐进上界或者下界,从而大概估计出程序在运行时的效率,但是这并不够直观,也不一定十分靠谱(在整体程序中仍有一些不可忽略的运行细节在估计时被忽略了),因此在实际评测程序时我们还是需要实际的考量程序的运行时间和瓶颈,最好具体到执行一段代码多少次,执行一段代码花了多少时间,幸好的是Python自带了许多有用的工具,可以帮助我们实现这些要求,下面是一些我在学习中记录的笔记,从简单到复杂介绍了python性能分析的方法,希望我的笔记能帮到您。
注:写作不易,转载请注明出处,谢谢支持~
目录
-
您也可以直接在字符串中包含你要测试的模块名,python会直接执行它,并用timeit得出时间:
这里在命令行的工作目录下,有一个test_timeit.py文件,其中的内容如下:def factorial(n): if n == 1: return 1 return n * factorial(n-1) if __name__ == "__main__": factorial(30)
timeit计算了执行main的时间
1.2 通过添加
-n N
命令可以设置语句执行的次数:1.3 通过添加
-r N
设置计时器重复多少次(默认是5次)(最后的结果是取平均?):1.4 通过添加
-s str
设置str语句只在初始化的时候执行一遍,后面会pass这个语句:
图片太小,把命令写一下:python -m timeit -n 100 -r 5 -s "from test_timeit import factorial" "factorial(20)"
其中-s
后跟着的"from test_timeit import factorial"
只在第一次时执行了
其中的factorial是一个计算阶乘的小函数,代码如下:def factorial(n): if n == 1: return 1 return n * factorial(n-1)
1.5 通过添加
-t
使用time.time()
(default on Unix)time.time()
返回从纪元(1970.1.1)至今的秒数。虽然这个函数的返回值永远为浮点数,
但并不是所有系统提供的秒数都会精确到小数点以后。
一般情况下这个函数的返回值不会小于它上一次被调用的返回值,除非系统时钟在两次调用之间发生了重置。
//参考upload/201903291110401628.png" alt="在这里插入图片描述" style="margin: 0px; padding: 8px 0px; border: 1px solid rgb(244, 242, 247); max-width: 520px; height: auto;" />1.7 通过添加
-v
,打印原始计时结果,以获得更高的数字精度,并且显示更具体的结果1.8 通过
-u
,设置计时单位:
可选项包括:nsec(纳秒),usec(微秒),msec(毫秒),sec(秒)