返回介绍

满分

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

下面文件介绍了编写这个操作的三种方法,从某种程序上讲其中至少一个是学生在学习的过程中提出来的:

·第一个函数获取了第一个参数(args是一个元组),并且使用分片去掉第一个得到了剩余的参数(一个对象同自己比较是没有意义的,特别是这个对象是一个较大的结构时)。

·第二个版本让Python自动获取第一个参数以及其余的参数,因此避免了进行一次索引和分片。

·第三个版本通过对内置函数list的调用让一个元组转换为一个列表,之后调用list内置的sort方法来实现比较。

Sort方法是用C语言进行编写的,所以有时它要比其他的程序运行的快,而头两种办法的线性搜索将会让它们在绝大多数时间都要更快[1]。文件mins.py包含了所有三种解决办法的代码。

所有的这三种解决办法在文件运行时都产生了相同的结果。试着在交互模式下输入一些调用来测试这些方法。

注意:上边这三种方法都没有做没有参数传入时的测试。它们可以做这样的测试,但是在这里做是没有意义的。所有的这三种解决办法,如果没有参数传入的话,Python都会自动地抛出一个异常。当尝试获取元素0时,第一种方案会发生异常;当Python检测到参数列表不匹配时,第二种方案会发生异常;在尝试最后返回元素0时,第三种方案会发生异常。

这就是我们所希望得到的结果:因为函数支持任何数据类型,其中没有有效的信号值能够传回标记一个错误。有异常来做这种规则(例如,在运行到错误发生时,不得不有很复杂的运行开销),通常来说,最好假设参数在函数代码中有效,并且当它们不是这样时可以让Python来抛出一个错误。

[1]其实,这相当复杂。Python sort例程是以C写成,使用高度优化的算法,试着利用被排序元素间的部分次序。这种排序称为"timsort",以其发明者Tim Peter命名,而在其文档中,声称有些时候有“超自然的性能”(对排序来讲,这真的很好)。不过,排序本质上依然是指数型的(必须多次切开序列,再重组起来),而其他版本只是执行线性、由左至右的扫描。结果就是,如果参数有部分定序,排序就会快一点,否则可能会慢一点。即使这样,Python的性能还是会不时的发生变化,而排序以C来实现的确有很大的帮助;有关精确的分析,你应该在第20章会碰到time和timeit模块进行计时。

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

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

发布评论

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