科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件深入了解Python暂缓列表生成器

深入了解Python暂缓列表生成器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

上周我们向你介绍了python列表推导(list comprehension),它让你能以更加自然的方式来表示列表的内容。本文将介绍它们的同类:python生成器,它可以一段一段地构成一个序列,按照你的要求完成工作量。

作者:开发者在线 2007年7月20日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

现在它运行良好,除非我们想要它停止,否则它会一直计算到我们指定的数字。但是,如果我们想要更改停止的条件,我们就必须重写这个函数。但是我们可以用生成器来实现它(从python的《python.org/dev/peps/pep-0255/">PEP生成器》一文借用的实现):

>>> def xfib():...a,b = 0,1...while True:...yield b...a, b = b, a+b... >>> fibseries = xfib()>>> b = fibseries.next()>>> while b < 20:...print b...b = fibseries.next()... 11235813

或者,如果我们想要在第一个回文(超过一位)处停止,我们只需要改变循环条件就行了:

>>> fibseries = xfib()
>>> b = fibseries.next()
>>> while b < 10 or not list(str(b)) == list(reversed(str(b))):
... print b
... b = fibseries.next()
...
1
1
2
3
5
8
13
21
34

这就行了(这个数列的下一个值是55)。但是我们通过使用生成器可以让列表生成实现与什么时候停止生成它的逻辑分离,同时只用计算我们需要的那么多值。

你应该在什么时候使用生成器而不用列表推导呢?首先,如果你准备使用完整的列表,你就最好使用列表推导——它们的速度会更快一些,因为不会有调用生成器函数所增加的系统开销。如果你准备使用列表的第一部分,那就使用生成器吧,因为这会节约你的CPU时间。

责任编辑:德东

查看本文国际来源

查看Nick Gibson专栏文章

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章