返回介绍

对迭代的各种方法进行计时

发布于 2024-01-29 22:24:16 字数 995 浏览 0 评论 0 收藏 0

本书已经介绍了一些迭代的替代方案。让我们简要地看一下这个实例,来学习融和了所有我们所学过的关于迭代和函数的内容。

列表解析要比for循环语句有速度方面的性能优势,而且map会依据调用方法的不同表现出更好或更差的性能。上一节介绍的生成器表达式看起来比列表解析速度更慢一些,但是它们把内存需求降到了最小。

所有这些今天都是真实的,但是随着时间的不同其相对的性能也有所不同(Python还在不断的优化中)。如果你想要自己测试它们的话,试试在自己的电脑上,用现有的Python版本来运行下面脚本。

对模块计时

幸运的是,Python使得对代码计时变得很容易。要看看迭代选项是如何叠加起来的,让我们从编写到一个模块文件中的简单但通用的计时器工具函数开始,从而使其可以用于各类程序中。

实际上,这个模块通过获取开始时间、调用函数固定的次数并且用开始时间减去停止时间,从而对使用任何位置和关键字参数调用任意函数进行计时。注意以下几点:

·Python的time模块允许访问当前时间,精度随着每个平台而有所不同。在Windows上,这个调用号称能够达到微妙的精度,已经相当准确了。

·range调用放到了计时循环之外,因此,它的构建成本不会计算到Python 2.6的计时函数中。在Python 3.0的range是一个迭代器,因此这个步骤是不需要的(但无伤大雅)。

·reps计数是一个全局变量,如果需要的话,导入者可以修改它:mytimer.reps=N。

当这些完成后,所有调用的总的使用时间在一个元组中返回,还带有被计时的函数的最终返回值,以便调用者可以验证其操作。

从一个更大的角度来看,由于这个函数编写到一个模块文件中,在我们想要导入它的任何地方,它都成为了一个广为有用的工具。在本书的下一部分中,我们还将学习有关模块和导入的更多内容,但是,通过这些代码,我们已经看到了足够多的基础知识——直接导入该模块并调用函数来使用这个文件的计时器(如果需要回顾的话,参见第3章对模块属性的介绍)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文