最近发现python的优化其实感觉有点可有可无,为什么呢。之前我刷leetcode用python实现了一个整数反转的算法。
第一种方法是使用python自带的函数从int转str,然后str倒转转int。最快大约花了24ms。然后我想着能不能更快,然后从官方那边抄了一个C++的的算法,我以为能很快,然而最快也只能到24ms,而且需要多次提交才能达到这个效果。我推测应该是python编译留下的缓存,直接就运行了。
很明显对于python这种语言,真正的性能瓶颈是嵌套循环。然而嵌套循环在任何语言都是大头。如果真的要求真正的毫秒级的优化,应该选择C++这种强静态语言。python更多的是为快速开发而生。当然这并不能说明python的优化不重要,对python优化的掌握程度也能从侧面反映一个人对python的理解深度
1、优化循环
循环之外能做的事不要放在循环内
2、使用join
合并迭代器中的字符串
join对于累加的方式,有大约5倍的提升
3、使用if is
使用if is True
比if == True
将近快一倍
4、使用级联比较x < y < z
x < y < z
效率略高,而且可读性更好
5、使用**而不是pow
%timeit -n 10000 c = pow(2,20)
%timeit -n 10000 c = 2**20
10000 loops, best of 3: 284 ns per loop
10000 loops, best of 3: 16.9 ns per loop
**就是快10倍以上!
6、优化包含多个判断表达式的顺序
对于and,应该把满足条件少的放在前面,对于or,把满足条件多的放在前面
a = range(2000)
%timeit -n 100 [i for i in a if 10 < i < 20 or 1000 < i < 2000]
%timeit -n 100 [i for i in a if 1000 < i < 2000 or 100 < i < 20]
%timeit -n 100 [i for i in a if i % 2 == 0 and i > 1900]
%timeit -n 100 [i for i in a if i > 1900 and i % 2 == <