python生成器中yield和send分析

Posted Kingfan----来自湖南常德的野生程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python生成器中yield和send分析相关的知识,希望对你有一定的参考价值。

生成器

在python中生成器是指用代码实现迭代器的的功能本质还是迭代器,只不过是代码实现迭代器功能。在python中生成器是由函数实现的,通常我们在函数中加入yeild就可以实现生成器。

生成器中yield

#定义一个函数
def func():
    print(111)
    yield  3
    print(222)
g=func()

运行上面代码你会发现函数根本没有执行,因为此时g是一个生成器对象,生成器是不会自己运行的,需要你调用next方法才会运行,并且每次遇到yield就会停止,继续调用next方法才会继续运行直到下一个yield。

def func():
    print(111)
    yield  3
    print(222)
g=func()
print(g.__next__())

运行结果:

可以看打印了111,222并没有打印,说明函数运行到yield就停止了,3是yield的返回值。

总结:

yield的作用主要有两个:1、暂定当前函数的运行。2、可以返回值给调用者

send的用法

send的用法类似于next()方法都可以使函数继续运行,并且可以传送值给上一个yield

def func1():
    # print(1)
    count = yield 6
    print(count)
    # print(2)
    count1 = yield 7
    print(count1)
    # print(3)
    yield 8

# g = func1()
# next(g)
# # g.send(\'alex\')
# g.send(\'alex\')
# g.send(\'太白\')
# g.send(\'太白\')

总结:

send 与next一样,也是对生成器取值(执行一个yield)的方法。
send 可以给上一个yield 传值。
第一次取值永远都是next。
最后一个yield 永远也得不到send传的值。

以上是关于python生成器中yield和send分析的主要内容,如果未能解决你的问题,请参考以下文章

理解Python协程:从yield/send到yield from再到async/await

理解Python协程:从yield/send到yield from再到async/await

python生成器yield和send

Python生成器next方法和send方法区别

Python生成器next方法和send方法区别

python协程:yield的使用