# 子天生器def average_gen(): total = 0 count = 0 average = 0 while True: new_num = yield average # 吸收调用方传入的值,并返回均匀值 count += 1 total += new_num average = total/count# 委托天生器def proxy_gen(): while True: yield from average_gen() # 将子天生器作为参数传入,并将其结果返回# 调用方def main(): calc_average = proxy_gen() # 创建委托天生器工具 next(calc_average) # 委托天生器 print(calc_average.send(10)) # 向子天生器传入10,打印10.0 print(calc_average.send(20)) # 向子天生器传入20,打印15.0 print(calc_average.send(30)) # 向子天生器传入30,打印20.0if __name__ == '__main__': main()
这个例子实现了一个实时打算均匀值的功能。委托天生器在yield from处停息,等待调用方发送值给子天生器。子天生器在yield处停息,吸收调用方发送的值,并返回均匀值给委托天生器。委托天生器再将均匀值返回给调用方。这样就实现了调用方和子天生器之间的双向通道
