• python_生成器


    生成器  1. 调用的时候才生成

                 2.只能调用一个函数 __next__() ,只记住当前位置,只能一个一个取值

         3.不知道数据的长度

    1.最简单的生成器

    ListGener = [i*2 for i in range(1,8)] #列表生成式
    print(ListGener)
    
    Gener = (i*2 for i in range(1,8))  #变成一个生成器
    print(type(Gener))

    for i in Gener:
        print(i)

    2.只能调用一个函数 __next__() ,只记住当前位置

    Value = Gener.__next__()
    print(Value)
    print(Gener.__next__())

     3. 有yield 的函数是一个生成器,return 返回的值是一个异常

    def GenerFun(Count):
    i = 0
    n = 1
    while i < Count:
    yield n
    n = n * ( i + 2)
    i +=1
    return "errer" #用next方法时,若超过长度,则抛出异常

    gen = GenerFun(10)
    print(type(gen))
    # print(gen.__next__())
    # print(gen.__next__())
    # print(gen.__next__())
    # print(gen.__next__())
    # print(gen.__next__())
    # print(gen.__next__())
    for i in gen:
    print(i)

    打印结果:

    <class 'generator'>

    1
    2
    6
    24
    120
    720
    5040
    40320
    362880
    3628800

    4. 可以通过yield 实现单线程下的实际并发运行的效果

        yield :函数执行到yield时会被中断,等待下次被唤醒(send()或__next__()函数)

      send()方法,唤醒生成器方法,并给yield传值

      next方法只是调用生成器方法

    import time
    File = open("debug.txt","a",encoding="utf-8")
    def consumer(name):
        print("%s write data to file!" %name)
        while True:
            strMSG = yield
            File.write(strMSG + "from %s
    " %name)
            print("写入[%s],被[%s]!" %(strMSG,name))
    # c = consumer("writeFile")
    # c.__next__()
    # b1= "string message"
    # c.send(b1)
    # c.__next__()
    def producer(name):
        c = consumer('writer1')   #形成一个生成器,相当于初始化一样,不是函数调用
        c2 = consumer('writer2')
        c.__next__()       #这儿才开始调用生成器
        c2.__next__()
        print("producer beging...")
        for i in range(10):
            time.sleep(1)
            strmsg = str(i) +"woshidi"
            c.send(strmsg)
            c2.send(strmsg)
    producer("yes")
    View Code
  • 相关阅读:
    Sel4:显示等待
    Sel4:css定位,id,class,属性,层级
    Sel3:鼠标操作,右键,悬停,双击操作
    Sel2:Xpath定位
    Se1:css定位
    八:Appium元素UIAutomator定位方式
    七:Appium元素list定位方式
    六:Appium元素定位xpath定位方式
    五:Appium元素‘相对定位’定位方式
    四:Appium元素className定位方式
  • 原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8653952.html
Copyright © 2020-2023  润新知