迭代器生成器和yield单线程并发实现

迭代器是访问集合元素的一种方式。实现是next()方法

# coding:utf-8

a = iter([1,2,3])
print(a)
try:
    print(a.__next__())
    print(a.__next__())
    print(a.__next__())
    print(a.__next__())
except StopIteration:

    print ('遍历完毕')


生成器generator

定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 

作用:

这个yield的主要效果呢,就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。

另外,还可通过yield实现在单线程的情况下实现并发运算的效果

#!/user/bin/evn python
#-*- coding:utf-8 -*-
import time
def consumer(name):
    print('%s准备吃包子了!'%name)
    while True:
        baozi = yield
        # 
        print('包子%s来了,被%s吃了!'%(baozi,name))

def producer(name):
    c = consumer('A')
    c2 = consumer('B')
    c.__next__()
    c2.__next__()
    print('开始准备做包子了')
    for i in range(1,6):
        time.sleep(1)
        print('做了两个包子')
        c.send(i)
        c2.send(i)

producer('Jason')


这个生成器类似中断回调机制。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值