博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器&&生成器
阅读量:5165 次
发布时间:2019-06-13

本文共 862 字,大约阅读时间需要 2 分钟。

一  迭代器

1、什么是迭代

 指的是一个重复的过程,每一次重复成为一次迭代,并且每一次重复的结果是下一次重复的初始值

2、为什么要有迭代器

对于序列类型:str,list,tuple,可以依赖索引来迭代取值,但是对于dict,set,文件,python文件必须为我们提供一种不依赖索引的取值方式--》迭代器

3、可迭代对象

  有这个方法obj.__iter__的都是可迭代对象,上面提到的都可迭代对象

4、迭代器对象:

既有obj.__iter__,obj__next__方法的是迭代器对象,上面提到的只有文件是迭代器对象

5、总结:

1)可迭代对象不一定是迭代器对象

2)迭代器对象一定是可迭代对象

3)调用obj__iter__()方法,得到的是迭代器对象(对于迭代器对象执行__iter__得到的仍然是迭代器对象)

 

字典可转换成迭代器对象,不依赖索引取出key

 

上图等同于下图

注意:迭代器d_iter没有值了,就会抛出异常StopIteration

 6、for循环详解

 

原理:

1)调用in后的obj__iter_()

2)k=obj_iter_.next_()

3)捕捉StopIteration 异常,结束迭代

7、迭代器的优缺点:

优点:

1)提供一种统一的、不依赖于索引的取值方式,为for循环的实现提供了依据

2)迭代器同一时间在内存中只有一个值--》更节省内存

缺点:

1)只能往后取值,并且是一次性的

2)不能统计值的个数,即长度

 二 生成器

1、什么是生成器?

只要在函数内被出现yield关键字,那么在执行函数就不会执行函数体代码,会得到一个结果,该结果就是生成器

生成器就是迭代器

2、yield的功能:

1)yield为我们提供了一种自定义迭代器对象的方法

2)   yield与retur的区别:

① yield 可以返回多次值

② 函数暂停与再继续的状态是有yeild帮我们保存的

小练习:

 

转载于:https://www.cnblogs.com/yuguangwei/p/8202384.html

你可能感兴趣的文章
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
JS一些概念知识及参考链接
查看>>