next(函数A(原参数)):如果第一次调用函数A的话就从头开始。之后再调用 next(函数A(原参数)) 就从yield之后开始,一直到在遇到yidle。
函数B。send(变参数):如果第一次传入none的话,第二次再调用 函数B。send(变参数) 就从 变量 = yiedl 也就是变量赋值开始。一直到再遇到yiedl
把上面代码加两步,就明白了。
注意这不是抄袭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)
运行一下一看就知道了 |