Python |效率和性能

时间:2010-03-16 19:16:33

标签: python optimization premature-optimization

让我们说我要通过运行单个脚本在列表中保存100个浮点数,很可能需要一些内存来处理。所以如果这个代码每次都作为应用程序的要求执行,那么将会性能打击,所以我的问题是如何保持效率以获得性能。

模拟代码:

def generate_lglt():
    float1, float2 = 27.2423423, 12.2323245
    lonlats = []
    for val in range(100, 0, -1):
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
    print lonlats

感谢。

2 个答案:

答案 0 :(得分:9)

瓶颈发生在意想不到的地方,因此从不优化代码只是因为您认为它可能是尝试改进的正确代码。你需要做的是

  1. 编写程序以使其完全运行。
  2. 开发测试以确保您的程序正确无误。
  3. 确定您的程序是否太慢。
    • 你很有可能会退出这一步。
  4. 开发能够逼真运行程序的性能测试。
  5. 使用cProfile模块在​​实际性能测试中对代码进行概要分析。
  6. 弄清楚哪些算法改进可以提高代码的性能。
    • 这通常是提高速度的方法。
  7. 如果您使用最佳算法进行作业,请执行微优化。
    • 用C语言重写关键部分(可能使用Cython)通常比Python微优化更有效。

答案 1 :(得分:2)

如果要在很多不同的时间调用generate_lglt(),您可能希望在每次调用代码时不再重新生成相同的范围(100,0,-1)。您可能希望在某处缓存该生成的范围并反复使用它。

此外,如果您要在不完成每次迭代的情况下退出for循环,请使用xrange而不是range。