扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:开发者在线 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者