没有用过的东西,没有深刻理解的东西很难说自己会,而且被别人一问必然破绽百出。虽然之前有接触过python中的生成器的概念,但是只是走马观花,这两天的一次交谈中,别人问到了生成器,顿时语塞,死活想不起来曾经看过的东西,之后突然想到了yield,但为时已晚,只能说概念不清,所以本篇今天总结缕缕python的生成器和yield关键字。

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。

一、迭代器(iterator)

在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器。迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开。

使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。

二、生成器(constructor)

生成器函数在Python中与迭代器协议的概念联系在一起。简而言之,包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。函数也许会有个return语句,但它的作用是用来yield产生值的。

不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效。

解析获取到一页信息后,我们需要将信息处理一下,遍历提取结果并生成字典,这样的目的是为了将数据结构整齐(不然的话,数据比较乱),便于后面存储数据。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

在这里,我用了生成器函数,每调用一次函数时,将会返一个迭代对象,这个迭代对象里面包含一页的所有信息,如下图:

这样,在我们需要将信息保存时,只需再次遍历这个迭代对象,就可以一条一条的将每一期的3D彩票信息按照自己想要的结构存储起来,代码如下(我是将信息存储到Excel表格中):

保存效果:

分析一下这个例子

parse_one_page函数中出现了关键字yield,预示着这个函数每次只产生一个结果值,这个函数返回一个生成器(通过**print(parse_one_page)**输出可以看出来),用来产生连续的迭代对象。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

在创造生成器实例的时候,只需要像普通函数一样调用就可以,但是这个调用却不会执行这个函数,这个可以通过输出看出来

看到这里应该可以理解生成器这个抽象的概念了吧,如果不懂可以留言,我会一一给大家回答

为什么叫生成器函数?

因为他随着时间的推移生成了一个数值队列。一般的函数在执行完毕之后会返回一个值然后退出,但是生成器函数会自动挂起,然后重新拾起继续执行,他会利用yield关键字关起函数,给调用者返回一个值,同时保留了当前的足够多的状态,可以使函数继续执行。生成器和迭代协议是密切相关的,可迭代的对象都有一个__next()__成员方法,这个方法要么返回迭代的下一项,要么引起异常结束迭代。

为了支持迭代协议,拥有yield语句的函数被编译为生成器,这类函数被调用时返回一个生成器对象,返回的对象支持迭代接口,即成员方法__next()__继续从中断处执行执行。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

为了更加深刻的理解,我再举个例子:

结果如下:

正所谓,眼看十遍不如手动一遍,赶紧动起手来感受一下这个神奇又抽象的生成器概念吧;若你有更好的理解方式。

由浅入深|让你彻底理解Python中的yield相关推荐

  1. 深入理解Python中的yield和send

    send方法和next方法唯一的区别是在执行send方法会首先把上一次挂起的yield语句的返回值通过参数设定,从而实现与生成器方法的交互. 但是需要注意,在一个生成器对象没有执行next方法之前,由 ...

  2. 理解Python中的yield

    理解Python中的yield 参考文献 本文浅谈自己对Python中yield关键字的理解. yield可以理解成return,但是它与return又不完全相同.在Python中,yield关键字是 ...

  3. 彻底理解Python中的yield

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

  4. python中yield讲解_「技术」如何深入理解Python中的 yield?

    深入理解 yield 为了理解什么是 yield,你必须理解什么是生成器.在理解生成器之前,让我们先走近迭代. Iterables 当你建立了一个列表,你可以逐项地读取这个列表,这叫做一个可迭代对象: ...

  5. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  6. python中元组_理解python中的元组

    理解 python 中的元组 引言 在 Python 中元组是这样的: 元组是是这样一种数据结构:不变的或者不可改变的(简单来说不能重新赋值) .元素的有序序列.因为元组是 不变的,所以他的数值是不能 ...

  7. python中继承是什么意思_如何理解Python中的继承?python入门

    如何理解Python中的继承?如今,python编程语言深受企业和个人的喜爱.python开发工程师是近年来互联网行业非常热门的职业岗位之一.学习python的人除了零基础的,还有一部分是在职运维.在 ...

  8. python装饰器作用-理解python中的装饰器

    一 什么是装饰器? 正如其名,装饰器的作用是为已经存在的对象增加额外功能(装饰),由此可使已有函数在无需代码改动的情况下增加额外功能:装饰器的本质是嵌套的函数且返回函数对象,即闭包.有关闭包的概念,可 ...

  9. python怎么导入包-如何理解Python中包的引入

    Python的from import *和from import *,它们的功能都是将包引入使用,但是它们是怎么执行的以及为什么使用这种语法呢? 从一模块导入全部功能 from import * me ...

最新文章

  1. 基于三维模型的目标识别和分割在杂乱的场景中的应用
  2. 设计模式(二)__装饰设计模式
  3. Fast Radial Symmetry Transform/快速径向对称变换
  4. AES加密算法的VHDL实现
  5. 【WebRTC---入门篇】(九)WebRTC网络基础:P2P/STUN/TURN/ICE
  6. net core 获取网站目录
  7. python如何实现支持中文
  8. 关于tensorflow的碎片
  9. java组件_三个必不可少的Java平台组件:什么是JVM,JDK,JRE?有啥区别?
  10. python使用-如何在Windows上使用Python进行开发
  11. 通过外挂插件向预训练语言模型中融入知识
  12. Vue的父子组件通信(转载)
  13. oracle-第N篇加强专题
  14. 例3.5 二叉排序树 - 九度教程第35题(二叉排序树)
  15. 这12款开源数据分析应用软件值得关注
  16. 修复Mac中Mounty无法显示的文件
  17. Cubist Artwork
  18. 罗技 k380快捷键
  19. 网易_在数组中查找前K个元素
  20. Fer2013表情识别Group_Project_Document

热门文章

  1. ——Eigen介绍及简单使用(PCL库实现)
  2. js调用微信扫一扫demo_JS 调用微信扫一扫功能
  3. 微信气泡主题设置_微信猫和老鼠主题怎么弄?猫和老鼠聊天气泡主题设置教程...
  4. 爬虫怎么处理python_python 爬虫怎么处理json内容
  5. java 图形应用有必要学吗_儿童英语口语怎么学?有必要报班吗?
  6. python从tushare获取数据_python调用tushare获取股票月线数据
  7. 电脑上win是哪个键_电脑按哪个键是切换拼音输入法
  8. Oracle的安装、配置与工具使用 实验笔记一
  9. python qt信号在qml 的使用_QML使用Python的函数过程解析
  10. java数据库的量级_程序员学Python还是Java?分析了8张图后得出这个结论