# 生成器与协程 # 生成器是一种特殊的迭代器,它同样生成一个值的序列; # 如何定义生成器? # 方法一:函数中使用yield关键字; class count_down(n): while n>0: yield n n-=1 # 创建一个生成器对象 c = count_down(10) # __next__()方法调用生成器; >> c.__next__() 10 # 生成器对象提供了close()方法,来避免部分消耗; # 即:停止使用生成器时,就会自动调用close()方法; class count_down(n): try: while n>0: yield n n-=1 except GeneratorExit: print(‘捕捉到退出的异常!‘) c = count_down(10) for i in c: print(i) if i==5: break >> ... # 循环输出至5 >> ‘捕捉到退出的异常!‘ # 生成器实现简单的协程 def coroutine(func): def start(): g = func() g.next() return g return start @coroutine def receiver(): while True: n = yield print("Got %s"%n) r = receiver() r.send(‘hello world‘)