返回介绍

生成器表达式:迭代器遇到列表解析

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

在最新版本的Python中,迭代器和列表解析的概念形成了这种语言的一个新的特性,生成器表达式。从语法上来讲,生成器表达式就像一般的列表解析一样,但是它们是括在圆括号中而不是方括号中的。

实际上,至少在一个函数的基础上,编写一个列表解析基本上等同于:在一个list内置调用中包含一个生成器表达式以迫使其一次生成列表中所有的结果。

尽管如此,从执行过程上来讲,生成器表达式很不相同:不是在内存中构建结果,而是返回一个生成器对象,这个对象将会支持迭代协议并在任意的迭代语境的操作中。

我们一般不会机械地使用next迭代器来操作生成器表达式,因为for循环会自动触发。

实际上,每一个迭代的语境都会这样,包括sum、map和sorted等内置函数,以及在第14章中我们学到过的其他迭代语境,例如any、all和list内置函数等。

注意,如果生成器表达式是在其他的括号之内,就像在那些函数调用之中,在这种情况下,生成器自身的括号就不是必须的了。尽管这样,在下面第二个sorted调用中,还是需要额外的括号。

生成器表达式大体上可以认为是对内存空间的优化,它们不需要像方括号的列表解析一样,一次构造出整个结果列表。它们在实际中运行起来可能稍慢一些,所以它们可能只对于非常大的结果集合的运算来说是最优的选择。关于性能的更权威的评价,必须等到我们在本章稍后编写计时脚本的时候给出。

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

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

发布评论

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