• 生成器



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

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

    #例子1
    def Foo(amount):
        while amount >0:
            amount -= 1
            yield 1    #函数中有yield语法,函数就变成了生成器
            print("握草,败家仔又来取钱!")
    
    ATM = Foo(3)      #默认生成器只能在创建时传一次参数(不过可以通过send()方法来赋值传参)
    # print(ATM)      #生成器在调用时不会直接执行 <generator object Foo at 0x000000000068BFC0>
    
    print("本次提现:%s万元
    "%ATM.__next__())    #需要通过__next__()方法来依次调用
    print("本次提现:%s万元
    "%ATM.__next__())
    print("本次提现:%s万元
    "%ATM.__next__())

    #例子2
    #使用yield实现单线程中的异步并发效果
    '''
    yield方法即可以赋值也可以有返回值
    1. variable = yield    这样是给variable赋值
    2. yield 100           这样是返回值(返回值为100)
    '''
    import time
    def consumer(name):
        print("%s 准备吃包粽子了"%name)
        while True:
            zongzi = yield  #send(i)会给yield赋值,然后yield在赋值给zongzi这个变量
            print("粽子[%s]来了,被[%s]吃了!"%(zongzi ,name))
    
    def producer(name):
        a = consumer('A')
        b = consumer('B')
        a.__next__()
        b.__next__()
        print("%s准备做粽子了!"%name)
        for i in range(10):
            time.sleep(1)
            print("做了2个粽子!")
            a.send("最大的粽子")   #给yield赋值
            b.send(i)   #给yield赋值
    
    producer("eric")
  • 相关阅读:
    SCRIPT7002: XMLHttpRequest: 网络错误 0x2efe, 由于出现错误 00002efe 而导致此项操作无法完成
    经纬转换成point的sql
    build.xml
    ubuntu下安装vsftpd及vsftpd配置文件不见的解决办法
    500 OOPS: could not read chroot() list file:/etc/vsftpd.chroot_list
    【linux】su、sudo、sudo su、sudo -i的用法和区别
    Js获取上一月份
    BigDecimal工具类
    查询重复的记录
    Excel 合并单元格
  • 原文地址:https://www.cnblogs.com/l729414559/p/6876851.html
Copyright © 2020-2023  润新知