第一时间关注 Python 技术干货!
阅读文本大概需要 6 分钟。
春节过后,大家都陆续返回工作地上班了吧,我今天第一天上班,在地铁上用手机总结分享时忘了时间,坐过了一站,地铁上人也挺多,大家又逐渐回归到上海的快节奏生活中。
不管是公司的产品还是自己的项目,如果要做强做大,必须要关注性能问题,你的代码性能差,在大神眼里,就是不规范的代码了。
(图片来源:微信朋友圈)
你平时有关注你的代码的性能问题吗?今天通过几个简单的小栗子,给大家来讲讲性能耗时那些事儿。
打印1000以内数的列表
打印1000以内的数并组成一个 list 列表,这道题不难吧?你能用四种方法解答此题吗?借此机会正好复习下你的基础,先不要看答案,自己先想想,然后再点击空白处就可以查看答案。
01
方法1:for 循环 & 连接符
点击空白处显示答案
02
方法2:for 循环 & append 添加
点击空白处显示答案
03
方法3:列表表达式
点击空白处显示答案
04
方法4:Python 内置函数
点击空白处显示答案
都答出来了吧?没全部想到的同学得要好好复习下基础了。
哪个性能最优?
以上四种方法哪种代码的性能最优呢?先想想,心中有自己的答案后再点击下方空白查看,看看正确答案是不是你心中所想。
00
哪种方法性能最优?
点击空白处显示答案
方法4:Python 内置函数
为什么是这种方式性能最优呢?我们分别计算出代码的运行时间就会一目了然了。
计算代码执行时间,我们可以用 timeit 模块里的方法。timeit 模块可以用来测试一小段 Python 代码的执行速度。
timeit 模块定义了接受两个参数的 Timer 类。两个参数都是字符串。第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。
一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,默认为一百万次,方法返回执行代码的耗时,返回的是 float 类型的秒数。
所以它的用法格式如下:
这里为了比较时间,我把执行次数扩大 10000 倍。
把上面函数代码加上一下代码同时执行。
执行结果如下:
结果出来了吧,最快的是用内置函数 list range 方法,执行 10000 次后耗时 0.17 秒,亚军是列表表达式,0.42 秒,耗时最长是用加号连接符,耗时 18 秒。
所以,结论是:调用 Python 内置函数执行速度是最快的,内置函数的性能是最优的。所以当你的模块被大量调用,尽量用内置函数搞定。
平时大家爬虫时往列表里添加数据也是用得比较多的吧,往列表里添加数据用的多是 append() 和 insert(),这个两个方法有区别吗?有。直接看执行效果。
运行结果如下:
所以,append() 方法是从尾端添加元素,而 insert() 方法是从顶端添加元素的。
他们的区别不仅于此,性能上有区别吗?我们用上面的方法看看便知。
为了看清楚效果,我们把 range 内的次数改成 10000。
看看执行耗时:
差距太明显,直接 KO,所以 append 从尾端添加元素的效率远远高于 insert 从顶端添加元素的效率。
希望通过今天的小栗子,大家能明白性能的重要性,当然,这只是性能优化的冰山一角,以后我们慢慢再聊。
觉得对你有帮助的大家帮忙点点好看,戳下鸡腿,也可以转发给更多的伙伴。
领取专属 10元无门槛券
私享最新 技术干货