写点什么

从 yield 开始入门协程

作者:乌龟哥哥
  • 2023-05-11
    上海
  • 本文字数:757 字

    阅读完需:约 2 分钟

从 yield 开始入门协程

简单介绍 yield

本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处,又各有不同。


  • 相似的是:yield 和 return 都可以在一个函数里将值返回给调用方;

  • 不同的是:return 后,函数运行就终止了,而 yield 则只是暂停运行。


关于 yield 的简单使用,请先看如下例子


>>> def demo():...     yield 1...     yield 2...     yield 3...>>> gen = demo()>>> gen<generator object demo at 0x10a9f5970>>>>>>>>>> for i in gen:...     print(i)...123
复制代码


重点有如下几个:


  1. 含有 yield 的函数,不再是普通的函数,直接调用含有 yield 的函数,返回的是一个生成器对象(generator object)

  2. 可以使用 for 循环(实际还可以使用 list 或者 next 函数)来遍历该生成器对象,将 yield 的内容一个一个打印出来


更多关于 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))
复制代码


输出。


0232
复制代码


这里解释下为什么这么输出。 重点是jump = yield index这个语句。


分成两部分: - yield index 是将 index return给外部调用程序。 - jump = yield 可以接收外部程序通过 send()发送的信息,并赋值给jump

发布于: 刚刚阅读数: 3
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021-03-16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
从 yield 开始入门协程_三周年连更_乌龟哥哥_InfoQ写作社区