美文网首页python基础
Python性能优化

Python性能优化

作者: SnailTyan | 来源:发表于2017-09-18 18:39 被阅读49次

    文章作者:Tyan
    博客:noahsnail.com  |  CSDN  |  简书

    Python使用非常方便、灵活,因此很受欢迎。但正因为如此,导致实现同一功能时,Python代码有很多写法,但不同的写法有不同的性能。因此写Python代码要有良好的习惯,多写高性能的代码。作者原来平常写Python代码也很随意,直到某天处理大量数据时半天看不到结果,究其原因,是Python代码的性能问题导致的。

    1. 列表解析与列表重建

    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import time
    
    fr = open('words.txt')
    t1 = time.time()
    word_list = fr.readlines()
    t2 = time.time()
    print 'read file time: ', t2 -t1
    fr.close()
    
    # for循环构建列表
    keywords = []
    t1 = time.time()
    for word in word_list:
        word = word.strip()
        keywords.append(word)
    t2 = time.time()
    print 'for loop time: ', t2 - t1
    
    # 列表解析
    t3 = time.time()
    keywords = [word.strip() for word in word_list]
    t4 = time.time()
    print 'list pars time: ', t4 - t3
    
    fr = open('words.txt')
    t5 = time.time()
    keywords = [word.strip() for word in fr.readlines()]
    t6 = time.time()
    fr.close()
    print 'read file and list parse time: ', t6 - t5
    
    print 'list length: ', len(word_list)
    

    运行结果:

    read file time:  0.0318450927734
    for loop time:  0.137716054916
    list pars time:  0.0910630226135
    read file and list parse time:  0.124923944473
    list length:  441669
    

    结论:本次测试中,列表解析时间是for循环时间的2/3

    2. 字符串拼接

    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import time
    
    fr = open('words.txt')
    keywords = [word.strip() for word in fr.readlines()]
    fr.close()
    
    # 加号拼接字符串
    t1 = time.time()
    str1 = ''
    for word in keywords:
        str1 += word
    t2 = time.time()
    print 'string concat time: ', t2 - t1
    
    # join拼接字符串
    t1 = time.time()
    str2 = ''.join(keywords)
    t2 = time.time()
    print 'string join time: ', t2 - t1
    
    print 'list length: ', len(keywords)
    

    运行结果:

    string concat time:  0.0814869403839
    string join time:  0.0123951435089
    list length:  441669
    

    结论:本次测试中,join函数拼接字符串比+=拼接字符串快6倍多

    3. range与xrange

    • range

    python中range会直接生成一个list对象。

    • xrange

    用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器,它的类型为xrange。在生成非常大的数字序列时,xrange不会马上开辟很大的一块内存空间。如果不是需要返回列表,则尽可能使用xrange

    测试代码:

    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    import time
    
    t1 = time.time()
    for i in range(1000000):
        pass
    t2 = time.time()
    print 'range time: ', t2 -t1
    
    t1 = time.time()
    for i in xrange(1000000):
        pass
    t2 = time.time()
    print 'xrange time: ', t2 -t1
    

    测试结果:

    range time:  0.0680990219116
    xrange time:  0.0329170227051
    

    结论:本次测试中,xrangerange快一倍多。

    相关文章

      网友评论

      本文标题:Python性能优化

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