Python代码性能优化
来源:互联网 发布:红蜘蛛软件一年多少钱 编辑:程序博客网 时间:2024/05/17 22:43
Python性能优化的一般步骤:
步骤1:找到性能 瓶颈
步骤2:优化性能 瓶颈
步骤3:goto 『步骤1』
找出瓶颈
不要相信直觉,使用专业工具
使用专业工具:
profile / cprofile
line_profiler
ipython: %prun
使用 timeit 模块来评判性能
import timeittimeit.Timer(…).timeit()ipython: %prun
例一:
def function1(): for item in range(1000000): pass
在python2中,range的实现方式是直接在内存中开辟一个静态的数组,而xrange则是通过迭代的方式动态的去生成,所以显而易见,在需要的数据量特别大的时候,range则会非常的耗费内存,所以其优化方式如下:
def function2(): for item in xrange(1000000): pass
简单来说,就是在需要range时,用xrange来代替,需要注意的是,在python3中,已经用xrange来代替range了,所以在python3里面,不存在这种性能问题。
例二:
def function1(l): result = [] for i in l: if i % 2 == 0: result.append(i) return result
列表迭代式相对与一般的for循环或while循环迭代方式拥有更好的性能,所以可以用列表迭代式进行代替,但是这样会大大降低代码的可读性,所以在性能和代码可读性方面要认真权衡。
def function2(l): return [i for i in l if i % 2 == 0]
例三:
def add_two(i): return i + 2def function1(l): result = [] for item in l: result.append(chr(add_two(item))) return result
在python里,访问局部变量的速度要快于访问全剧变量,并且函数调用开销也是不容忽视的。因此,可以通过以下方式来进行优化:
def function2(l): result = [] lchr = chr for item in l: result.append(lchr(item + 1)) return result
例四:
l = range(10000) def function1(): return 9000 in l
上边提到过,range的效率是相当低的,这是第一点,第二点是在判断一个数是否在一个列表中时,采用迭代的方式来判断,其时间复杂度是O(n),而当采用set时,由于set的实现方式是基于哈希的方式进行存取的,故在找一个元素是否在一个列表里的时候,其时间复杂度为O(1),效率提高了n倍,而且n越大,效率提高的就越明显。
s = set(range(10000)) def function2(item): return item in s
例五:
def function1(): l = [] for i in xrange(10000): l.insert(0, i)
这段代码的功能是往列表里面插入1-10000,且每次将新的元素插入到列表0号位置,但是由于列表的特性,每次插入到最左端的话,就需要将列表已存入的值整体右移,再将新的值插入0号位置。这样将使大量的时间耗费在移动元素上,造成效率低下,对于这种要求,我们可以使用deque来做双端队列。总结来说就是用正确的结构来做正确的事情。类似的结构还有:bisect / heapq / array / collections等。
from collections import deque def function2(): l = deque() for i in xrange(10000): l.appendleft(i)
本文固定链接:http://blog.dreamchasinger.cn/?p=603
欢迎访问我的自建博客:http://blog.dreamchasinger.cn
- Python 代码性能优化
- Python代码性能优化
- Python代码性能优化
- Python代码性能优化技巧
- Python 代码性能优化技巧
- python 代码 性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Python代码性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Python代码性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Python 代码性能优化技巧
- Json?OR FlatBuffers?FlatBuffers
- maven 仓库推荐
- Java后端面试总结
- 插入排序
- 第八天 方法的基本应用
- Python代码性能优化
- 关于ArrayList的5道面试题
- 计算方法_插值_C++实现
- 数据点定义
- 数据库的简要认知
- 回调
- HDU5115 Dire Wolf 区间dp
- list set map区别
- iOS 在NSObject子类的执行代码中实现UIViewController的跳转