python中的生成器

python中有两种方式产生生成器:

  1. 生成器函数:
    1. 和普通函数看起来差不多,区别是,生成器函数使用yield返回值,而不是用return
    2. 自动实现了迭代器协议,即实现了__next__方法(python3)
    3. 生成器函数返回一个生成器对象
    4. yield返回值之后函数没有结束,而是处于中断状态,下次调用直接从上次的状态继续执行,直到产生StopIteration

例子如下:

#使用迭代方法写的斐波那契函数
In [10]: def fib(n):
    ...:     if n <= 2:
    ...:         yield 1
    ...:     nPre = 1
    ...:     nPost = 1
    ...:     for i in range(n):
    ...:         nCur = nPre + nPost
    ...:         yield nCur
    ...:         nPre, nPost = nPost, nCur
    ...:
In [11]: type(fib(10))
Out[11]: generator



In [13]: for i in fib(10):
    ...:     print(i)
    ...:
2
3
5
8
13
21
34
55
89
144

 

2. 生成器表达式:

和列表推导式类似,区别是将 [ ] 换成了 ( ) 

例子如下:

In [15]: squares = (i**2 for i in range(10))
In [17]: next(squares)
Out[17]: 0

In [18]: next(squares)
Out[18]: 1

In [19]: next(squares)
Out[19]: 4

In [20]: next(squares)
Out[20]: 9

In [21]: for i in squares:
    ...:     print(i)
    ...:
16
25
36
49
64
81

最后:生成器只能遍历一次,生成器是一种特殊的迭代器

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值