python跑循环很慢 |
您所在的位置:网站首页 › python优化方法 › python跑循环很慢 |
![]() 从本文开始,我将总结Python开发时,遇到的性能优化问题的定位和解决。 本系列主要参考并翻译Python官网和stackify上的如下文章,并加上一些思考和代码。如有错漏,欢迎批评指正,转载请联系我获得许可。 PythonSpeed/PerformanceTips - Python Wikiwiki.python.org https://stackify.com/20-simple-python-performance-tuning-tips/stackify.com本文最后附需要优化的代码转换为C或者机器码的包。 概述:性能优化的原则——优化需要优化的部分。 性能优化的一般步骤: 首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它是不是真的很慢。第三,如果很慢,找出占用大部分时间的代码。一个全面的测试用例可以保证未来的优化不会改变你程序的正确性。简单说,就是: 写代码 检查代码运行结果是否正确 分析慢不慢 优化 返回第二步继续某些优化等同于好的编程风格,这些应该在你学编程语言的时候就学会,比如,把那些循环内不会改变的值的计算过程移动到循环外。 1、使用列表生成式——简洁快速生成新列表老代码: cube_numbers = [] for n in range(0,10): if n % 2 == 1: cube_numbers.append(n**3)新代码: cube_numbers = [n**3 for n in range(1,10) if n%2 == 1]在代码量较少的时候,这两种方法可能差不多,但代码量多一些,可就不一样了。 2、尽量使用内置的方法Python有很多内置的方法,你可以写高质量、高效的代码,但这也很难打败内置的库。这些代码已经被优化和严格测试过,查看内置方法列表,看看你是否重复造轮子了。 3、使用xrange()而不是range()在Python2中,使用xrange()而非range()可以避免在循环中,在内存中存储所有数字,xrange()返回的是一个生成器,当循环这个对象时,在内存中仅仅保存当前对象。 想查看一个对象的内存占用,可以使用: import sys numbers = range(1,10000) print(sys.getsizeof(numbers))在Python3中使用range(),相当于Python2中的xrange() 4、考虑自己写生成器前面几点提到了一般的优化模式,即,生成器能用就用。生成器允许我们一次返回一个对象,而不是所有对象。如前所述,xrange()正是一个Python2中实现的生成器,Python3中的range()也是生成器。 如果你工作中使用列表,考虑写自己的生成器,以使用这种延迟加载和高效的内存利用方法。生成器在读大量文件时尤其有用,处理大块文件而不必担心其大小,因为生成器的存在而成为可能。 import requests import re def get_pages(link |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |