• 生成器


    什么是生成器generator?  

          PYTHON中生成器可以简单的理解为就是迭代器,跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

    生成器构建

           1. 通过生成器函数

      2. 通过生成器推导式

      3. python内置函数或者模块提供


    生成器函数:

    def test(*args):
        for i in args:
            yield i  #只要函数里面有yield 那这个就是生成器函数 。这里用while循环效果也是一样
    
    num = 1000
    a = test(*range(num))
    print(next(a))
    
    



    yield from使用


    def test(*args):
        li = [0,1,2]
        #yield li 返回整个list
        yield from li  #这里返回类似迭代器,返回列表中的第一个元素.yield from 也可以多个
    
    num = 10000000
    a = test(*range(num))
    print(next(a))
    


    yield send

    def gen(name):
        print(f'您好! {name} ')
        while 1:
            food = yield 11
            print(f'{name} 今天想吃 {food} 么?')
    dog = gen('kkk')
    next(dog)
    # 还可以给上一个yield发送值
    dog.send('酸菜')
    ret = dog.send('香肠')
    print(ret)
    ret = dog.send('烤串')
    print(ret)
    
    输出::::::::::::::::
    您好! kkk
    kkk 今天想吃 酸菜 么?
    kkk 今天想吃 香肠 么?
    11
    kkk 今天想吃 烤串 么?
    11


    send和next()区别:

            相同点:

                send 和 next()都可以让生成器对应的yield向下执行一次。

                都可以获取到yield生成的值。

            不同点:

                第一次获取yield值只能用next不能用send(可以用send(None))。

                send可以给上一个yield置传递值。


    yield与return的区别:

            return一般在函数中只设置一个,他的作用是终止函数,并且给函数的执行者返回值。

            yield在生成器函数中可设置多个,他并不会终止函数,next会获取对应yield生成的元素。














  • 相关阅读:
    Python 文件的输入与输出
    php获取客户端真实ip
    php设计模式(3)-观察者模式
    php设计模式(2)-单例模式
    php设计模式(1)-工厂模式
    设计模式
    设计模式-观察者模式
    include和require的区别
    php分页类
    反向Ajax,第5部分:事件驱动的Web开发
  • 原文地址:https://www.cnblogs.com/menkeyi/p/13809051.html
Copyright © 2020-2023  润新知