python 生成器

生成器

在Python中,这种一边循环一边计算的机制,称为生成器:generator。

创建生成器方法1

要创建一个生成器,有很多种方法。第一种方法很简单,只要把一个列表生成式的 [ ] 改成 ( )
可以用next(list)打印出来

In [18]: l = [x for x in range(5)]

In [19]: l
Out[19]: [0, 1, 2, 3, 4]

In [20]: l = (x for x in range(5))

In [21]: l
Out[21]: <generator object <genexpr> at 0x7f92fadaed58>
In [22]: next(l)
Out[22]: 0

In [23]: next(l)
Out[23]: 1

In [24]: next(l)
Out[24]: 2

In [25]: next(l)
Out[25]: 3

In [26]: next(l)
Out[26]: 4

In [27]: next(l)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-27-101c36968c6d> in <module>()
----> 1 next(l)

创建生成器方法2

著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

In [28]: def fib(times):
   ....:     n = 0
   ....:     a,b = 0,1
   ....:     while n<times:
   ....:         print(b)
   ....:         a,b = b,a+b
   ....:         n+=1
   ....:     return 'done'
   ....: 

In [29]: fib(5)
1
1
2
3
5
Out[29]: 'done'

In [30]: def fib(times):
   ....:     n = 0
   ....:     a,b = 0,1
   ....:     while n<times:
   ....:         yield b
   ....:         a,b = b,a+b
   ....:         n+=1
   ....:     return 'done'
   ....: 

In [31]: F = fib(5)

In [32]: next(F)
Out[32]: 1

In [33]: next(F)
Out[33]: 1

In [34]: next(F)
Out[34]: 2

In [35]: next(F)
Out[35]: 3

In [36]: next(F)
Out[36]: 5

In [37]: next(F)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-37-8c2b02b4361a> in <module>()
----> 1 next(F)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 日精进404天 体验入: 和太太一起看到了襄阳的第一个无人超市,使我感到即恐惧而又非常兴奋!当时就想如何预防无人超...
    宇宙之爱黄昊贵阅读 322评论 0 0
  • 前几天闲暇之余便从学校图书馆借了一本美文,一直喜欢散文浅浅的絮说,能温润那些被平凡忘却的温柔。 有个故...
    荷风语安阅读 280评论 0 1
  • 职评刚过,圈内悲喜互见,过关者窃喜而忘言,落第者忧伤而泄愤,超然者恬淡而自勉。欲上者众而指标寡,僧多粥少,有如拥堵...
    晴鹤1阅读 227评论 5 5
  • 在中国提起LOL,你想到的一定是rng,不可否认rng在中国仍然是一流战队,国际上也超前的战队,其战队中担任AD位...
    nice乔镇西阅读 283评论 0 0
  • 沈文彬回到宿舍跟肖培培的处境就不一样了。 他茫茫撞撞的冲进来,说:“兄弟们,我给大家发福利,想要的举手。” 赖...
    俗底阅读 655评论 0 4