• 生成器



    生成器:
    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")
  • 相关阅读:
    jedis操作redis事务练习
    jedis连接redis,测试操作redis常用的数据类型 String List Set Hash Zset
    多态的理解
    binarySeach方法
    数组重新认识
    String的 认识
    接口的 认识
    抽象类及抽象方法
    protected的深刻理解
    protected的认识
  • 原文地址:https://www.cnblogs.com/l729414559/p/6876851.html
Copyright © 2020-2023  润新知