阐述思路是:迭代(iteration)、迭代器(iterator)、生成器(generator)。

迭代

迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次迭代,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。

在python中,迭代通常是通过for ... in ...来完成的,而且只要是可迭代对象(iterable),都能进行迭代.这里简单讲下iterator:

iterator是实现了iterator.__iter__()和iterator.__next__()方法的对象。iterator.__iter__()方法返回的是iterator对象本身.根据官方的说法,正是这个方法,实现了for ... in ...语句.而iterator.__next__()是iterator区别于iterable的关键了,它允许我们显式地获取一个元素.当调用next()方法时,实际上产生了2个操作:

  1. 更新iterator状态,令其指向后一项,以便下一次调用
  2. 返回当前结果

(正是__next__(),使得iterator能在每次被调用时,返回一个单一的值;iterator是消耗型的,即每一个值被使用过后,就消失了.因此,你可以将以上的操作2理解成pop.)

【for…in…情况:

生成器

【基本概念:

常说的生成器,就是带有yield的函数;

generator iterator是generator function的返回值,即一个generator对象;

而形如(elem for elem in [1, 2, 3])的表达式,称为generator expression,实际使用与generator无异.】

Yield使用示例:

第一次调用next()方法时,函数似乎执行到yield 1,就暂停了.然后再次调用next()时,函数从yield 1之后开始执行的,并再次暂停.第三次调用next(),从第二次暂停的地方开始执行.第四次,抛出StopIteration异常.

事实上,generator确实在遇到yield之后暂停了,确切点说,是先返回了yield表达式的值,再暂停的.当再次调用next()时,从先前暂停的地方开始执行,直到遇到下一个yield.

可以将yield理解成一个中断服务子程序的断点,没错,是中断服务子程序的断点.我们每次对一个generator对象调用next()时,函数内部代码执行到”断点”yield,然后返回这一部分的结果,并保存上下文环境,”中断”返回.

最新文章

  1. infer 检验IOS项目
  2. Java魔法堂:解读基于Type Erasure的泛型
  3. js为DIV动态设置id属性
  4. MyEclipse9中的不伤眼修改、FreeMarker插件、JQuery提示插件、全屏(FullScreen)插件的安装
  5. python 核心编程第二版 课后习题 第11章
  6. 【Android】isEmpty()
  7. LVM(1)
  8. 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
  9. Java ZIP打包
  10. Android 网格视图GridView的使用
  11. JSON的数据类型
  12. golang 私钥"加密"公钥"解密"
  13. voa 2015 / 4 / 13
  14. android viewpager切换到最后一页时,跳转至其他activity
  15. 使用MaxCompute Java SDK 执行任务卡住了,怎么办?
  16. Java内存模型探秘
  17. PHP文件解密服务,微擎微赞模块解密,微擎模块解密
  18. Python基础线程和协程
  19. 面向对象三大特性编写面向对象程序,self到底是谁
  20. JavaSript模块规范 - AMD规范与CMD规范介绍[转]

热门文章

  1. Vue中keep-alive组件的理解
  2. Learning in Spiking Neural Networks by Reinforcement of Stochastic Synaptic Transmission
  3. jdk 功能变化
  4. 从零开始的SpringBoot项目 ( 四 ) 整合mybatis
  5. Resharper 2020 免费破解版
  6. C++ Templates (2.2 使用Stack类模板 Use of Class Template Stack )
  7. Python3 高级编程技巧(部分)
  8. 前端修仙之路---一、如何用gulp搭建一套web前端开发框架
  9. oeasy教您玩转linux010109clear清屏
  10. Oracle两个数据库互相访问-九五小庞