python--生成器

一、生成器(generator)

1、概念

生成器是一种特殊的迭代器,以一种懒加载的模式生成值。

2、创建方式

(x**2 for x in range(10))
 1 s=(x*2 for x in range(5))
 2 
 3 
 4 print(next(s))
 5 print(next(s))
 6 print(next(s))
 7 print(next(s))
 8 print(next(s))
 9 #这里多加一个print(next(s))会报错
10 
11 for i in s:
12     print(i)
13 #for循环会处理stopIteration
14 
15 
16 #两种输出方式
17 #print(s.__next__())#不建议使用
18 #next(s)#等价于s.__next__()建议使用

通过yield
 1 def foo():
 2     print('ok')
 3     yield 1
 4     print('ok2')
 5     yield 2
 6 
 7 g=foo()#此时的g是一个生成器对象
 8 
 9 next(g)#进入后执行print('ok'),返回值为1(这里的next(g)==1)
10 next(g)#进入后执行print('ok2'),返回值为2(这里的next(g)==2)
11 
12 for i in g:
13     print(i)#这里的i等价于next(g)

生成器函数跟普通函数只有一点不一样,就是把 return 换成yield,其中yield是一个语法糖,内部实现了迭代器协议,同时保持状态可以挂起。

3、斐波那契数列

 1 def fid(max):
 2     n, a, b = 0, 0, 1
 3     while n < max:
 4         print(b)
 5         a, b = b, a+b
 6         n = n + 1
 7 
 8 fid(10)
 9 
10 def fid(max):
11     n, a, b = 0, 0, 1
12     while n < max:
13         yield b
14         a, b = b, a+b
15         n = n + 1
16 
17 for i in fid(10):
18     print(i)

 生成器与斐波那契数列相似,都是通过计算返回下一个数值

4、send函数

 1 def bar():
 2     print('ok')
 3     count = yield 1
 4     print(count)
 5     yield 2
 6 
 7 b = bar()
 8 b.send(None)
 9 b.send('rap god')
10 
11 # 断点调试
12 # 1、内存有块内容
13 # 2、创建生成器
14 # 3、第一次进入生成器,没有传入任何参数,相当于next(b),到了yield 1返回
15 # 4、第二次进入传参,赋值给count,返回值为2

 

转载于:https://www.cnblogs.com/haichong/p/8570316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值