生成器

什么是生成器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生成的元素。














posted @ 2020-10-13 15:20  MKY-门可意  阅读(138)  评论(0编辑  收藏  举报