简单介绍 yield
本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return
就像一对新兄弟,有相似之处,又各有不同。
相似的是:yield 和 return 都可以在一个函数里将值返回给调用方;
不同的是:return 后,函数运行就终止了,而 yield 则只是暂停运行。
关于 yield 的简单使用,请先看如下例子
>>> def demo():
... yield 1
... yield 2
... yield 3
...
>>> gen = demo()
>>> gen
>>>
>>>
>>> for i in gen:
... print(i)
...
1
2
3
重点有如下几个:
含有 yield 的函数,不再是普通的函数,直接调用含有 yield 的函数,返回的是一个生成器对象(generator object)
可以使用 for 循环(实际还可以使用 list 或者 next 函数)来遍历该生成器对象,将 yield 的内容一个一个打印出来
向生成器中发送消息
函数暂停之后,如果调用者能在下一次恢复函数运行的时候,向它传递一些信息,那么整个程序的灵活性会大大提升。
下面通过一个简明的演示来看看,如何往生成器中发送消息:
def jumping_range(N):
index = 0
while index < N:
# 通过send()发送的信息将赋值给jump
jump = yield index
if jump is None:
jump = 1
index += jump
if __name__ == '__main__':
itr = jumping_range(5)
print(next(itr))
print(itr.send(2))
print(next(itr))
print(itr.send(-1))
输出。
0
2
3
2
这里解释下为什么这么输出。 重点是jump = yield index
这个语句。
分成两部分:
1.yield index
是将index return
给外部调用程序。
2.jump = yield
可以接收外部程序通过send()发送的信息,并赋值给jump
审核编辑:汤梓红
-
信息
+关注
关注
0文章
407浏览量
35611 -
函数
+关注
关注
3文章
4350浏览量
63056 -
python
+关注
关注
56文章
4811浏览量
85105
发布评论请先 登录
相关推荐
清华大学发布:DeepSeek从入门到精通
![清华大学发布:DeepSeek<b class='flag-5'>从</b><b class='flag-5'>入门</b>到精通](https://file.elecfans.com/web2/M00/4E/DC/poYBAGLCjeiALm_WAAAYmfR7Qec474.png)
适用于MySQL和MariaDB的Python连接器:可靠的MySQL数据连接器和数据库
![适用于MySQL和MariaDB的<b class='flag-5'>Python</b>连接器:可靠的MySQL数据连接器和数据库](https://file1.elecfans.com/web3/M00/06/57/wKgZPGeJ2kmAcWpWAAAh1ecL_LM122.png)
入门设计从读取数据表开始
![<b class='flag-5'>入门</b>设计<b class='flag-5'>从</b>读取数据表<b class='flag-5'>开始</b>](https://file1.elecfans.com/web3/M00/03/65/wKgZPGdozpuAc4bYAAAl8C54l00680.png)
TCSH shell 编程入门
使用TMS320C6416协处理器:Turbo协处理器(TCP)
![使用TMS320C6416<b class='flag-5'>协</b>处理器:Turbo<b class='flag-5'>协</b>处理器(TCP)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
怎么从零基础入门先楫
使用TMS320C6416协处理器:Viterbi协处理器(VCP)
![使用TMS320C6416<b class='flag-5'>协</b>处理器:Viterbi<b class='flag-5'>协</b>处理器(VCP)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
新书推荐 | TSMaster开发从入门到精通
![新书推荐 | TSMaster开发<b class='flag-5'>从</b><b class='flag-5'>入门</b>到精通](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
重磅!翘首以盼的《TSMaster开发从入门到精通》正式出版!
![重磅!翘首以盼的《TSMaster开发<b class='flag-5'>从</b><b class='flag-5'>入门</b>到精通》正式出版!](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
评论