0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从yield开始入门python协程

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-16 16:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简单介绍 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

    文章

    408

    浏览量

    36298
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66839
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89586
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NICE处理器接口信号解读--以demo为例

    对memory的访存请求,也就是当nice处理器访存时能够独占内存的访问权,如下图所示。 2.Request Channel:主机(cpu)对机(NICE处理器)发送指令 NICE
    发表于 10-31 08:01

    利用Verdi调试处理器的实现步骤

    本次给大家介绍的是利用Verdi调试处理器的实现步骤。 有时为了观察处理器运行情况,需要查看处理器接口的信号波形,此时可以用Verdi来查看主处理器发给处理器的自定义指令以进一
    发表于 10-30 08:26

    学习Linux应该哪里开始

    、交叉编译、网络栈、文件系统……到底哪里开始学,才能既不绕弯路,又能学得“有感觉”? 今天, 深圳市钡铼技术有限公司 就来带你拆解这个问题。 一、先理解:Linux 到底是什么? 很多人学 Linux,一上来就打开虚拟机敲命令。但真正
    的头像 发表于 10-16 09:51 301次阅读
    学习Linux应该<b class='flag-5'>从</b>哪里<b class='flag-5'>开始</b>?

    跟老齐学Python入门到精通

    本帖最后由 yuu_cool 于 2025-6-3 16:52 编辑 本资料是面向编程零基础读者的Python 入门教程,内容涵盖了Python 的基础知识和初步应用。以比较轻快的风格,向零基
    发表于 06-03 16:10

    DeepSeek:入门到精通

    电子发烧友网站提供《DeepSeek:入门到精通.pdf》资料免费下载
    发表于 05-28 14:12 2次下载

    python入门圣经-高清电子书(建议下载)

    此资料内容是一本针对所有层次的Python 读者而作的Python 入门电子书。 全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括matplotlib、NumP
    发表于 04-10 16:53

    LuatOS深度解析:小白也能10分钟学会,代码效率直接起飞!

    嵌入式开发如何兼顾效率与简洁?LuatOS给出完美答案!它用类线程的语法封装异步逻辑,让多任务开发像单线程一样简单。本文用图文并茂的方式拆解原理,10分钟带你轻松
    的头像 发表于 04-10 15:23 455次阅读
    LuatOS<b class='flag-5'>协</b><b class='flag-5'>程</b>深度解析:小白也能10分钟学会,代码效率直接起飞!

    10分钟上手写代码,LuatOS轻松掌握!

    10分钟学会LuatOS,从此你的程序也能像通勤族利用碎片时间一样游刃有余。现在就去动手试一试,开启异步编程新体验! 写给第一次听说的你‌: 别怕!
    的头像 发表于 04-10 15:18 492次阅读
    10分钟上手写代码,LuatOS<b class='flag-5'>协</b><b class='flag-5'>程</b>轻松掌握!

    Python入门到精通背记手册

    电子发烧友网站提供《Python入门到精通背记手册.pdf》资料免费下载
    发表于 03-28 17:43 85次下载

    进程、线程、傻傻分不清?一文带你彻底扒光它们的\"底裤\"!

    /file0 线程1 下载开始 http://example.com/file1 ...(并行执行) 所有下载完成! 第三章:——程序界的「时间管理大师」 定义:用户态的「虚拟线程」,靠主动让
    发表于 03-26 09:27

    零基础入门:如何在树莓派上编写和运行Python程序?

    在这篇文章中,我将为你简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一个简单的Python程序。什么是Python程序?
    的头像 发表于 03-25 09:27 1527次阅读
    零基础<b class='flag-5'>入门</b>:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    DeepSeek入门到精通

    电子发烧友网站提供《DeepSeek入门到精通.pdf》资料免费下载
    发表于 03-04 15:43 67次下载

    液晶屏维修入门到精通

    资料介绍了如何液晶屏入门到提高全部内容
    发表于 02-24 16:46 10次下载

    DeepSeek:入门到精通

    DeepSeek:入门到精通
    发表于 02-08 18:00 134次下载

    适用于MySQL和MariaDB的Python连接器:可靠的MySQL数据连接器和数据库

    适用于 MySQL 和 MariaDB 的 Python 连接器 Python Connector for MySQL 是一种可靠的连接解决方案,用于 Python 应用程序访问 M
    的头像 发表于 01-17 12:18 844次阅读
    适用于MySQL和MariaDB的<b class='flag-5'>Python</b>连接器:可靠的MySQL数据连接器和数据库