python学习第十二天———多任务协程之生成器
1.生成器方法
将列表推导式【】变为()
nums = (x*2 for x in range(10))
print(nums)
for i in nums:
print(i)
输出结果:
<generator object <genexpr> at 0x000002043B82E408>
0
2
4
6
8
10
12
14
16
18
2.函数中如果写有yield,则函数不再是函数,可以认为此函数为一个生成器的模板,调用函数时被认为是创建一个生成器对象而不是调用函数。
通过next启动生成器
输出结果:
3.通过异常判断生成器已经结束
4.通过send启动生成器
send()可以唤醒生成器,与next()区别是send()可以向生成器传值,一般send()不会再next()之前使用
def create_num(all_num):
a, b = 0, 1
count = 0
while count <= all_num:
#通过next接受yield返回的值a,返回后,如果没有再次调用使yield发挥作用,
#则暂停在等号右侧yield处,(停在等号右侧)当使用send()时,将()内的内容
# 传递给ret = yield a等号左侧的ret,因此通过print(">>>ret>>>",ret)
# 会输出send()发送的()内的值
ret = yield a
print(">>>ret>>>",ret)
count += 1
a, b = b, a+b
obj = create_num(10)
ret = next(obj)
print(ret)
ret = obj.send("haha")
print(ret)
输出结果:
0
>>>ret>>> haha
1
5.gevent多协程实现多任务