本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return
就像一对新兄弟,有相似之处,又各有不同。
关于 yield 的简单使用,请先看如下例子
>>> def demo():
... yield 1
... yield 2
... yield 3
...
>>> gen = demo()
>>> gen
<generator object demo at 0x10a9f5970>
>>>
>>>
>>> for i in gen:
... print(i)
...
1
2
3
重点有如下几个:
更多关于 yield 和生成器的内容,请前往前面的文章,里面有非常详细的讲解:3.6 【基础】生成器
函数暂停之后,如果调用者能在下一次恢复函数运行的时候,向它传递一些信息,那么整个程序的灵活性会大大提升。
下面通过一个简明的演示来看看,如何往生成器中发送消息:
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
这个语句。
分成两部分:
yield index
是将index return
给外部调用程序。jump = yield
可以接收外部程序通过send()发送的信息,并赋值给jump
下一节,我将讲一个Python3.5新引入的语法:yield from
。篇幅也比较多,所以就单独拿出来讲。