zoukankan      html  css  js  c++  java
  • 生成器generator

    生成器generator

    定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 

    代码:

    def cash_out(amount):
        while amount >0:
            amount -= 1
            yield 1<br>        print("擦,又来取钱了。。。败家子!")
     
     
     
    ATM = cash_out(5)
     
    print("取到钱 %s 万" % ATM.__next__())
    print("花掉花掉!")
    print("取到钱 %s 万" % ATM.__next__())
    print("取到钱 %s 万" % ATM.__next__())
    print("花掉花掉!")
    print("取到钱 %s 万" % ATM.__next__())
    print("取到钱 %s 万" % ATM.__next__())
    print("取到钱 %s 万" % ATM.__next__()) #到这时钱就取没了,再取就报错了
    print("取到钱 %s 万" % ATM.__next__())
    

    作用:

    这个yield的主要效果呢,就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。

    另外,还可通过yield实现在单线程的情况下实现并发运算的效果

    import time
    def consumer(name):
        print("%s 准备吃包子啦!" %name)
        while True:
           baozi = yield
     
           print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
     
    def producer(name):
        c = consumer('A')
        c2 = consumer('B')
        c.__next__()
        c2.__next__()
        print("老子开始准备做包子啦!")
        for i in range(10):
            time.sleep(1)
            print("做了2个包子!")
            c.send(i)
            c2.send(i)
     
    producer("alex")
    
  • 相关阅读:
    Java实现 LeetCode 437 路径总和 III(三)
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 436 寻找右区间
    Java实现 LeetCode 435 无重叠区间
    Java实现 LeetCode 435 无重叠区间
    Makefile第一讲:一个简单的Makefile
    GCC常用参数
    GCC参数详解
    linux .o,.a,.so文件解析
  • 原文地址:https://www.cnblogs.com/alan-babyblog/p/5193820.html
Copyright © 2011-2022 走看看