美文网首页
python性能优化指南

python性能优化指南

作者: openex | 来源:发表于2018-04-04 16:48 被阅读0次

本文用以记录在python开发中遇到的性能提高技巧
持续更新中...

1.字符串

在python中string对象是不可变的,而字符串的相加会产生新的字符串。
当需要迭代生成一个长字符串时逐一相加不仅会影响速度也会而外增加内存消耗(如中间结果,参考java StringBuffer), 但是当仅需链接很少的字符串时join方法未必明智

  • join的恰当使用
  • ""%()
  • format比较慢

避免

s = ""
for x in list1:
    s += x

推荐

s.join(list1)

避免

s = ""
for x in list1:
    s += fun(x)

推荐

list2 = [ fun(x) for x in list1 ]
s = "".join(list2)

避免

out = "<html>" + head + prologue + query + tail + "</html>"

建议

out = "<html>%(head)s%(prologue)s%(query)s%(tail)s</html>" % locals()
#变量相加过多时此方法较优,反之较差

2.循环

python解释器在解释for循环时会有较大的性能损耗,如果可以建议多使用列表解析来代替for循环,另外迭代器也在优化时间外还能够减少内存开销,在调用自写函数时map也会提高程序性能

newlist = [s.upper() for s in oldlist]

iterator = (s.upper() for s in oldlist)
newlist = list(iterator)

在循环中尽量避免 .(点号操作符)的使用,因为这往往会增加调用开销
避免

newlist = []
for x in oldlist:
    newlist.append(x.upper())

建议

newlist = []
append = newlist.append
upper = str.upper
for x in oldlist:
    append(upper(x))

3.变量

在函数中尽量使用局部变量,因为调用解释器会先搜索局部变量再搜索全局变量

避免

def f1():
    newlist = []
    append = newlist.append
    upper = str.upper
    global oldlist
    for x in oldlist:
        append(tool1(x))
    return newlist

建议

def f2(oldlist):
    newlist = []
    append = newlist.append
    for x in oldlist:
        append(tool1(x))
    return newlist

4.字典

针对无初值的情况进行优化(提升并不多20%左右,但在一定程度上降低了可读性)

原始方法

def f5(oldlist):
    d = {}
    for string in oldlist:
        if string not in d:
            d[string] = 0
        else:
            d[string] += 1

优化方法

def f6(oldlist):
    d = {}
    for string in oldlist:
        try:
            d[string] += 1
        except KeyError:
            d[string] = 0
            
from collections import defaultdict
def f8(oldlist):
    d = defaultdict(int)
    for string in oldlist:
        d[string] += 1

相关文章

  • Awesome Extra

    性能优化 性能优化模式 常见性能优化策略的总结 Spark 性能优化指南——基础篇 Spark 性能优化指南——高...

  • spark性能调优

    [Spark性能优化指南——基础篇][Spark性能优化指南——高级篇]

  • 目录

    Spark之参数介绍 Spark之性能优化2.1. 官方性能优化指南2.2. Spark性能优化指南——基础篇2....

  • python性能优化指南

    本文用以记录在python开发中遇到的性能提高技巧持续更新中... 1.字符串 在python中string对象是...

  • 前端性能优化系列

    【性能优化指南】带你全面掌握前端性能优化 ?https://segmentfault.com/a/11900000...

  • 美团关于大数据技术的文章

    Spark性能优化指南——基础篇Spark性能优化指南——高级篇Spark在美团的实践Kafka文件存储机制那些事...

  • 前端工程系列(二)

    前端工程与性能优化 首先,我们把雅虎14条优化原则,《高性能网站建设指南》以及《高性能网站建设进阶指南》中提到的优...

  • 关于前端性能优化问题详解

    关于前端性能优化问题详解 出处:http://segmentfault.com/blogs 前端性能优化指南 AJ...

  • Spark—9、性能优化—美团的性能优化指南

    美团的优化指南 Spark性能优化指南——基础篇[https://tech.meituan.com/2016/04...

  • 前端性能和优化

    简介 关于前端性能和优化我们有雅虎14条性能优化原则,还有两本很经典的性能优化指导书:《高性能网站建设指南》、《高...

网友评论

      本文标题:python性能优化指南

      本文链接:https://www.haomeiwen.com/subject/lsxlhftx.html