生成器 yield 和协程 yield

1. 生成器yield一般是返回值,协程yield一般在右边 m=yield

RE_WORD = re.compile('\w+')
class Sentence1:
    def __init__(self, text):
        self.text = text
    def __repr__(self):
        return 'Sentence(%s)' % reprlib.repr(self.text)
    def __iter__(self):
        for match in RE_WORD.finditer(self.text):
            yield match.group()

class Sentence:
    def __init__(self, text):
        self.text = text
        self.words = RE_WORD.findall(text)
    def __repr__(self):
        return 'Sentence(%s)' % reprlib.repr(self.text)
    def __iter__(self):
        for word in self.words:
            yield word
def averager():
    total = 0
    count = 0
    average = 0
    while True:
        term = yield 
        count += 1
        total += term
        average = total/count

2. .send()方法的增加,允许客户代码和生成器之间双向交换数据,.__next()__只允许客户从生成器获取数据,这项改进使生成器就变身成了 “协程”

3. 生成器用于生成供迭代的数据

4. 协程是数据的消费者

5. 协程和迭代无关,协程是指一个过程,和调用方协作,产出由调用方提供的值

6. 注意 虽然在协程中会使用yield产出值,但这和迭代无关

7. 在协程中,yield可以不接收或传出数据,是一种 流程控制 工具,实现协作式多任务,把控制器让步给中心调度程序,从而激活其他协程。

8. 从根本上把yield视作 控制流程 的方式,这样就好理解协程了

yield from 与工厂模式_gtestcandle的博客-CSDN博客from collections import namedtupleResult = namedtuple('Result', 'count average')def averager(): total = 0.0 count = 0 average = None while True: term = yield if term is None: break total += ter...https://blog.csdn.net/gtestcandle/article/details/120527812?spm=1001.2014.3001.5501

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值