生成器中send 函数

Posted fan-1994716

tags:

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

def foo():
print(‘starting...‘)
while True:
res=yield 4
print(‘res:‘,res)

g=foo()
print(g.__next__())
print(‘*‘*20)
print(g.send(7))

运行结果:
starting...
4
********************
res: 7
4
先大致说一下send函数的概念:此时你应该注意到上面那个的紫色的字,还有上面那个res的值为什么是None,这个变成了7,到底为什么,这是因为,send是发送一个参数给res的,因为上面讲到,return的时候,并没有把4赋值给res,下次执行的时候只好继续执行赋值操作,只好赋值为None了,而如果用send的话,开始执行的时候,先接着上一次(return 4之后)执行,先把7赋值给了res,然后执行next的作用,遇见下一回的yield,return出结果后结束。

 

5.程序执行g.send(7),程序会从yield关键字那一行继续向下运行,send会把7这个值赋值给res变量

6.由于send方法中包含next()方法,所以程序会继续向下运行执行print方法,然后再次进入while循环

7.程序执行再次遇到yield关键字,yield会返回后面的值后,程序再次暂停,直到再次调用next方法或send方法。
————————————————

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

Python生成器及send用法讲解

python生成器中yield和send分析

生成器的扩展 ------ send() 方法

生成器函数_yield_yield from_send

生成器函数的进阶和表达式and各种推导式

生成器函数进阶