参考链接: 什么时候在Python中使用yield而不是return

python中的yield功能比较强大,什么意思呢?如果一个函数f内使用了yield关键词,那么该函数就可以这样使用:

for item in f(***):

****

也就是包含yield关键词的函数可以在for循环中迭代,说到迭代第一印象是包含很多个元素才可以迭代,确实如此。举个更加详细的案例: 需求::

你需要产生一个按照特定规则增减的序列,比如最简单的递增序列:1,2,3…1000000,第一印象是可以把产生号的序列放到list中,使用的时候直接取值就好,但是这种做法有个致命的缺点,即需要预先存储这些序列,这会耗费大量的内存,那么有没有更好的方法呢?

这是yield出来拯救世界了:

def getSeq(num):

index = 1;

while index<num:

yield index

index = index+1

调用方法:

for i in getSeq(1000000):

pass

上述代码运行时,for中调用了getSeq,执行该函数时,遇到yield index时会将index的值返回,并且函数暂停在yield语句的位置,下次再调用getSequence时,将继续从上次暂停的位置开始运行,直到遇到yield关键词时又将index的值返回,一直这样循环

yield的作用也就是:当执行到yield关键词的代码时,函数会暂时返回,下次调用该函数时,会从上次暂停的地方继续运行,yield起到一个暂时返回的作用,有点像return。

另外,yield其实可以有返回值,也可以从外界改变yield的返回值:

def getSeq(num):

index = 1

while index<num:

res = yield index

print('res = '+str(res)+'\n')

index = index+1

for i in getSeq(3):

print('i = '+str(i)+'\n')

输出:

i=1 res = None i = 2 res = None

上面打印出的res取值都是None,yield将index的值返回给调用方后,res赋的值为None,但是我们也可以从外界手动给res赋值

def getSeq(num):

index = 1

while index<num:

res = yield index

print('res = '+str(res)+'\n')

index = index+1

seq = getSeq(5)#

next(seq)

seq.send(1)

seq.send(2)

seq.send(3)

输出:

res=1 res=2 res=3

上述代码先调用next(seq)主要是使getSeq函数暂停到yield语句的地方,暂停在yield语句后才能使用send方法给yield返回值赋值,否则会报错。

上述大概是yield关键词的使用,总结:

在执行seq = getSeq(5)的时候,函数并没有执行,此时seq的类型是对象,更具体一点seq是生成器类型(generator)每个generator类型对象主要有两个方法:send和next,next用来迭代,send用来给yield返回值赋值,默认情况下yield的返回值是None每一个send方法中隐式调用了next方法send方法是给yield表达式返回值赋值,所以函数必须暂停在yield代码处的时候才能调用send方法(其实就是调用send方法前至少调用一次next方法)for i in getSeq 其实就是对generator进行迭代,和next方法类似

扫描下方二维码,及时获取更多互联网求职面经、java、python、爬虫、大数据等技术,和海量资料分享:公众号后台回复“csdn”即可免费领取【csdn】和【百度文库】下载服务;公众号后台回复“资料”:即可领取5T精品学习资料、java面试考点和java面经总结,以及几十个java、大数据项目,资料很全,你想找的几乎都有

[转载] 【零基础学爬虫】python中的yield详解相关推荐

  1. Python中的yield详解

    阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结: 通常的for-in-循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文 ...

  2. python零基础看什么视频和书籍-资料│最适合大学生零基础学的Python视频+电子书...

    原标题:资料│最适合大学生零基础学的Python视频+电子书 月最热资源下载 (▲点击阅读) 已经不少童鞋跟播妞咨询了python的资源 今天播妞将整理好的部分python资源发布 是最适合零基础大学 ...

  3. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  4. 零基础学python电子书-资料│最适合大学生零基础学的Python视频+电子书

    原标题:资料│最适合大学生零基础学的Python视频+电子书 月最热资源下载 (▲点击阅读) 已经不少童鞋跟播妞咨询了python的资源 今天播妞将整理好的部分python资源发布 是最适合零基础大学 ...

  5. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  6. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  7. 【前端就业课 第一阶段】HTML5 零基础到实战(六)表格详解

    注意:手机(APP)打开,内容显示更佳,不会的私聊博主即可 想要拿代码或加入学习计划(** 博主会监督你并且教你写文章 **)的拉到最下面(PC端Web打开)加博主即可,目录也在最下面. 参加博主前端 ...

  8. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  9. python中的字符串详解(附实现文字跑马灯效果)

    python中的字符串详解 1.什么是字符串 ​ 相信大家对字符串应该是再熟悉不过了吧,因为日常生活中的一句话,或是路边的一则广告,其实它都相当于一个字符串,而顾名思义,字符串也就是一串串的由零个或多 ...

最新文章

  1. 高校二手交易代码_@21考研er:985高校捡漏指南!这些专业去年都没招满!!
  2. 理解SQL SERVER中的分区表
  3. 喜马拉雅 xm文件转m4a_4K YouTube to MP3 Mac(YouTube转mp3软件)
  4. mac上安装MySQL
  5. go 写入yaml_[Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)...
  6. 一文读懂 Serverless,将配置化思想复用到平台系统中
  7. android动态改变菜单栏,Android动态设置主题(使用RxBus模式)
  8. 开培训会没人来,是正常的
  9. 目标检测经典算法集锦
  10. wpa_supplicant中配置TTLS网络的phase2参数
  11. 学生成绩管理系统 需求规格说明书
  12. 布客·ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.4
  13. 自制Tableau数据看板示例
  14. 交易偏见--《别做正常的傻瓜》摘记2
  15. 鸿蒙判后而成意思,花果山就藏有长生不老之物,老猴王咋不说实情反让悟空出海求仙?...
  16. 亚商策略会|闪马智能乘势“价值重构”,分享智慧城市建设新思路
  17. java多态、抽象类和接口
  18. java8中数据类型_Java 8中 基本数据类型
  19. https请求调用工具类
  20. access_token(接口访问凭证)

热门文章

  1. python面向对象类_python面向对象-类和对象
  2. Nvidia CUDA初级教程4 GPU体系架构概述
  3. mysql导入xml 工具下载_XML导入Mysql工具下载|XmlToMysql 最新版v2.1 下载_当游网
  4. 戴尔电脑好还是华为好_华硕和戴尔笔记本哪种好 华硕和戴尔优缺点分析【详解】...
  5. python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)
  6. 三国佚事——巴蜀之危【递推】
  7. cobbler介绍与部署
  8. Jquery的一些方法
  9. 利用5w1h写出高效的git commit
  10. AdPlayBanner:功能丰富、一键式使用的图片轮播插件