美文网首页
coroutines总结整理

coroutines总结整理

作者: ThomasYoungK | 来源:发表于2018-01-07 22:15 被阅读71次

    这次看了一些关于协程(coroutine)的资料,这是python特有的,我会在这篇文字里面慢慢总结整理下来,估计会写个1周多。

    coroutine和generator的关系

    generator用到了yield语法,而coroutine也是用到了yield语法,什么区别呢?大致是这样的:

    1. generator是为iteration产生数据
    2. coroutine是消费数据
    3. coroutine也可以产生值,但目的不是为了迭代
    4. 不要把2个概念混在一起,写出让大家摸不着头脑的代码

    下面的代码是generator,用来倒数迭代用

    # countdown.py
    #
    # A simple generator function
    
    def countdown(n):
        print "Counting down from", n
        while n > 0:
            yield n
            n -= 1
        print "Done counting down"
    
    # Example use
    if __name__ == '__main__':
        for i in countdown(5):
            print i
    

    输出是

    Counting down from 5
    5
    4
    3
    2
    1
    Done counting down
    

    下面代码是coroutine,用来消费字符串,过滤出有用的行

    # grep.py
    #
    # A very simple coroutine
    
    def grep(pattern):
        print "Looking for %s" % pattern
        while True:
            line = (yield)
            if pattern in line:
                print line,
    
    # Example use
    if __name__ == '__main__':
        g = grep("python")
        # g.send(None)
        g.next()
        g.send("Yeah, but no, but yeah, but no")
        g.send("A series of tubes")
        g.send("python generators rock!")
        g.close()
    

    输出是

    Looking for python
    python generators rock!
    

    千万不要写下面的代码,又想消费,又想迭代,结果不知所云:

    # bogus.py
    #
    # Bogus example of a generator that produces and receives values
    
    
    def countdown(n):
        print "Counting down from", n
        while n >= 0:
            newvalue = (yield n)
            # If a new value got sent in, reset n with it
            if newvalue is not None:
                n = newvalue
            else:
                n -= 1
    
    # The holy grail countdown
    c = countdown(5)
    for x in c:
        print x
        if x == 5:
            c.send(3)
    

    输出是:

    Counting down from 5
    5
    2
    1
    0
    

    相关文章

      网友评论

          本文标题:coroutines总结整理

          本文链接:https://www.haomeiwen.com/subject/xrfmnxtx.html