zoukankan      html  css  js  c++  java
  • Generator和Coroutine学习

     简单的生产者消费者模型

    #!/usr/bin/python2.7
    
    def consumer():
        while True:
            newn = yield
            print 'Consumer : {}'.format(newn)
    
    def producer(func):
        func.next()       # 必须实例化,否则:TypeError: can't send non-None value to a just-started generator
        # func.send(None)   等价于 func.next()
        n = 0
        while n < 5:
            print 'Producer : {}'.format(n)
            func.send(n)
            n += 1
        func.close()
    
    if __name__ == '__main__':
        c = consumer()
        producer(c)
    
    # 结果如下:
    Producer : 0
    Consumer : 0
    Producer : 1
    Consumer : 1
    Producer : 2
    Consumer : 2
    Producer : 3
    Consumer : 3
    Producer : 4
    Consumer : 4

    yield表达式示例

    #!/usr/bin/python2.7
    
    def count_down(n=5):
        while n > 0:
            newn = yield n
            if newn:
                n = newn
            else:
                n -= 1
    
    if __name__ == '__main__':
        c = count_down()
        for num in c:
            print num
            if 5 == num:
                c.send(3)
                # tmp = c.send(3) 此时tmp就是 3 
    
    # 结果如下:
    5
    2
    1
    

      

      

  • 相关阅读:
    记一个在训练模型过程中自己给自己挖的坑
    Fast R-CNN学习总结
    SPP-net论文总结
    R-CNN学习总结
    3Sum Closest
    3Sum
    整数转为罗马数字
    Container With Most Water
    决策树
    回文数判断
  • 原文地址:https://www.cnblogs.com/standby/p/9364544.html
Copyright © 2011-2022 走看看