|
发表于 2018-3-28 14:22:57
|
显示全部楼层
最后一段代码: 借用楼里鱼油的代码分析一下(感谢这位鱼油的代码,加了几个标签以后更易懂了)
import random
def get_data():
"""返回0到9之间的3个随机数"""
return random.sample(range(10), 3)
def consume():
"""显示每次传入的整数列表的动态平均值"""
running_sum = 0
data_items_seen = 0
while True:
print("——3——") #.send( )返回前的最后一个位置
data = yield
print("——2——") #.send( )调用后的第二个位置
data_items_seen += len(data)
running_sum += sum(data)
print('The running average is {}'.format(running_sum / float(data_items_seen)))
def produce(consumer):
"""产生序列集合,传递给消费函数(consumer)"""
while True:
data = get_data()
print('Produced {}'.format(data))
consumer.send(data)
yield
print("——1——") #next( )调用后的第一个位置
if __name__ == '__main__':
consumer = consume()
consumer.send(None)
producer = produce(consumer)
for _ in range(10):
print('Producing...')
next(producer)
运行时,首先通过consumer.send(None)启动生成器,运行到yield前一句,打印出——3——
然后打印proceducing(这里还没有学到),,,通过next()获取下一个值,,先打印出Produced [0, 7, 9],,执行consumer这个生成器,,接着从上次停下的地方继续运行,data等于传入的参数也就是生成的随机数,打印——2——,计算打印出平均值,打印出——3——,停在yield之前,,返回到produce停在yield。。下一次执行再重复 |
|