Python中的生成器和yield详细介绍

2019-10-05 11:17:07于丽

def catch(target):
    while True:
        f=yield
        for line in f:
            target.send(line)
           
@default_next
def printer():
    while True:
        line=yield
        print line

然后将这些协程连接起来,就可以创建一个数据流处理管道了:

finder=find_files(opener(catch(printer())))
finder.send(toppath)

程序的执行完全由将数据发送到第一个协程find_files()中来驱动,协程管道会永远保持活动状态,直到它显式的调用close()。

总之,生成器的功能非常强大。协程可以用于实现某种形式的并发。在某些类型的应用程序中,可以用一个任务调度器和一些生成器或协程实现协作式用户空间多线程,即greenlet。yield的威力将在协程,协同式多任务处理(cooperative multitasking),以及异步IO中得到真正的体现。