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



