要理解yield的作用,您必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。

迭代器

当您创建一个列表时,您可以逐个读取它的项。逐项读取其项称为迭代:

>>> mylist = [1, 2, 3]
>>> for i in mylist:
...    print(i)
1
2
3

mylist是一个可迭代的对象。当你使用列表解析式时,你创建了一个列表,因此也是一个迭代器:

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
...    print(i)
0
1
4

所有你可以用"for... in ...."都是迭代器,包括列表、字符串、文件…等等。

这些迭代器非常方便,因为您可以随心所欲地读取它们,但是您将所有的值都存储在内存中,当您有很多值时,这就非常浪费内存了。

生成器

生成器是迭代器,这种迭代器只能迭代一次。生成器不会将所有值都存储在内存中,它们会动态生成这些值:

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
...    print(i)
0
1
4

它和列表解析式是类似的,只是用()代替了[]。但是,您不能在mygenerator中对i执行第二次,因为生成器只能使用一次:它print(0),然后忘记它,print(1),最后是4。

Yield

yield是一个与return类似的关键字,只是函数将返回一个生成器

>>> def createGenerator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)
0
1
4

您需要知道的是函数将返回一组只需要读取一次的值,将这个特性理解清楚,用对地方将极大地提高性能,下次我们将介绍在什么时候该用它。

要掌握yield,您必须了解,在调用函数时,在函数体中编写的代码不会运行。函数只返回生成器对象,这有点棘手:-)

然后,您的代码将从每次使用生成器时停止的地方继续。

现在是最难的部分:

for函数第一次调用从函数创建的生成器对象时,它将从头运行函数中的代码,直到达到yield,然后返回循环的第一个值。然后,彼此调用将再次运行您在函数中编写的循环,并返回下一个值,直到没有要返回的值为止,就如我们上面的例子所示。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦,有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典 原文来自Python实用宝典:Python Yield关键词的作用

arduino yield函数的作用_Python里Yield关键词的作用相关推荐

  1. python库作用_python 里 certifi 库的作用

    python 里 certifi 库的作用 安装了certifi之后,和requests库一样也有一个cacert.pem,可以用编辑器打开cacert.pem,里面包含了很多可信任知名公司的证书/公 ...

  2. python百分号的作用_python里百分号什么意思

    最近在学习python过程中,发现了%(百分号)的一些情况,这里就简单介绍一下. python里百分号有2个意思,计算数的时候,它是求余数的意思:另外一个是格式化字符串的作用,如:"%d % ...

  3. python中exit的作用_python __enter__ 与 __exit__的作用,以及与 with 语句的关系

    With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Python的with语句提供了一种非常方便的处理方式.一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取 ...

  4. python中逗号在print的作用_Python 逗号的几种作用

    最近研究Python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说 没有什么不解的地方 就是形参或者实参传递的时候参数之间的逗号 例如def abc( ...

  5. arduino yield函数的作用_深入理解yield

    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist( ...

  6. python中yield语句的作用_Python中关键字yield有什么作用

    python中,yield关键字的作用:1.将一个函数修改为生成器,利用生成器可以有效地节约系统资源,避免不必要的内存占用:2.用于定义上下文管理器:3.协程:4.配合from形成yield from ...

  7. Arduino ESP8266当中的yield 函数

    Arduino ESP8266当中的yield() 函数 在库函数中yield()函数相关代码: 通过VSCode PIO,我的文件位置在:C:\Users\Administrator\.platfo ...

  8. python yield函数_python之yield函数

    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist( ...

  9. c++11 yield函数的使用

    yield函数时c++11的新特性,它在std::this_thread::yield命名空间中实现,函数声明如下: void yield() noexcept; 其作用是当前线程"放弃&q ...

最新文章

  1. Play-With-Docker在chrome上的插件
  2. 使用python开发网页游戏_如何用python开发游戏
  3. NXP I.MX6ULL 交叉编译工具链下载地址?
  4. phpstudy安装ssl证书_新版Siteground一键安装免费SSL证书 网站https安全访问
  5. 当AV1视频编解码器来到Webex!
  6. 【PAT甲级 进制转换】1019 General Palindromic Number (20 分) Java版 7/7通过
  7. 程序员提高编程技术最有效的一件事?了解一下,迅速提升自己!
  8. 手把手教你详细分析 Chrome 1day 漏洞 (CVE-2021-21224)
  9. HDU-ACM-2018(母牛的故事)
  10. mysql 查询商品列表 显示tag_008商城项目:商品列表查询-查出商品并且分页
  11. iphone6 计算机无法检测到照相机,爱思助手无法识别设备怎么办 爱思助手无法识别设备解决方法...
  12. 复习单片机:流水灯(内含2种方法(左移操作符法+crol法)+设计思路+原始代码)
  13. DEM、DTM、DSM、DOM的区别
  14. 矩阵并行加速之NENO与SSE
  15. 前端html的base64使用方法window.btoa()和window.atob()
  16. windows画图常用函数
  17. 房屋出租系统(初级)
  18. 【Zabbix-SNMP trap】使用Zabbix的SNMP trap监控类型监控设备的一个例子
  19. Xmind思维导图神器:免费有免费的用法
  20. AI作诗:深度学习应用演示平台

热门文章

  1. 不容错过的 15 个 Linux 实用技巧
  2. 机器人也开始怕疼了?科学家开发无需人工干预即可自愈的机器人
  3. 在线等:“手里 5 个 offer,优选头条还是阿里?”
  4. 还在烦恼高性能网关设计?看这文就够啦!
  5. 搞定 Linux 命令之进程与数据流,不服来辩!| 原力计划
  6. 老师,你确定注释不会被执行吗?
  7. 港科大郑光廷院士问诊未来,揭露 AI 最新应用与实践
  8. 别让腾讯“科技向善”太孤独!
  9. 腾讯、阿里能像 Facebook 一样发币吗?
  10. Python 分析在德的中国程序员,告别 996 ?