第12章 优化——一些强大的技术

优化程序不是一个神奇的过程。遵循一个简单的算法就可以完成,这个算法由Stefan Schwarzer在Europython 2006上综合给出,他的原始伪代码示例如下:

   def optimize():
       """推荐的优化过程"""
       assert got_architecture_right(), "fix architecture"
       assert made_code_work(bugs=None), "fix bugs"
       while code_is_too_slow():
           wbn = find_worst_bottleneck(just_guess=False,
                                       profile=True)
           is_faster = try_to_optimize(wbn,
                                       run_unit_tests=True,
                                       new_bugs=None)
           if not is_faster:
               undo_last_code_change()

   # By Stefan Schwarzer, Europython 2006

这个例子可能不是最整洁,最清晰的,但是它几乎抓住了一个有组织的优化过程的所有的重要方面。从中我们可以学到的主要内容如下。

  • 优化是一个迭代过程,在这个过程中,并不是每次迭代都会有更好的结果。
  • 主要先决条件是通过测试验证并且正常工作的代码。
  • 你应该始终专注于优化当前的应用程序的瓶颈。

让你的代码工作地更快不是一个容易的任务。如果是抽象的数学问题,解决方案当然在于选择正确的算法和适当的数据结构。但在这种情况下,很难提供一些通用的提示和技巧,可以在任何代码中用于解决算法问题。当然有一些通用的方法来设计一个新的算法,甚至是可以应用于各种各样的问题的元启发式算法,但它们是语言无关的,因此不在本书的范围。 ...

Get Python高级编程(第2版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.