一、迭代器

1、迭代器的概念

迭代器即迭代的工具,那么什么是迭代呢?迭代是一个重复的过程,每一次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值。下面的代码就不是迭代.

whileTrue:print('====>')

上面代码只是单纯的重复,不是迭代。下面的代码就是迭代

1 l=[1,2,3]2 count=03 while count

二、为什么要有迭代器?什么是可迭代对象?什么是迭代器对象?

1、为什么要有迭代器

对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的

迭代方式,这就是为什么要需要迭代器。

2、什么是可迭代对象

可迭代对象指的是内置有_iter_方法的对象,即obj._iter_.如下

1 'hello'._iter_2 (1,2,3)._iter_3 [1,2,3]._iter_4 {'a':1}._iter_5 {'a','b'}._iter_6 open('a.txt')._iter_

3、什么是迭代器对象

可迭代对象执行obj._iter_()得到的结果就是迭代器对象,而迭代器对象指的是内置有_iter_又内置有_next_方法的对象,文件类型是迭代器对象

1 open('a.txt')._iter_2 open('a.txt')._next_

注意:

迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象。

1、迭代器协议:对象必须提供一个next()方法,执行该方法后要么返回迭代器中 的下一项,要么就引起一个StopIterator异常,以终止迭代(只能往后走不能往前退)

2、可迭代对象:实现了迭代器协议的对象

3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum(),min(),max()函数等)使用迭代器协议访问对象。

三、迭代器对象的使用

1 dic={'a':1,'b':2,'c':3}2 #得到迭代器对象,迭代器对象既有_iter_又有_next_,但是,迭代器_iter_()得到的仍然是迭代器本身

3 iter_dic=dic.__iter__()4 iter_dic.__iter__() isiter_dic5 #True

6 print(iter_dic.__next__())#等同于next(iter_dic)

7 print(iter_dic.__next__())#等同于next(iter_dic)

8 print(iter_dic.__next__())#等同于next(iter_dic)

9 #print(iter_dic.__next__())#等同于next(iter_dic)#抛出异常StopIteration异常

10

11 #有了迭代器我们就可以不依赖索引取值了

12 iter_dic=dic.__iter__()13 while 1:14 try

15 k=next(iter_dic)16 print(dic(k))17 exceptStopIteration18 break

19 #这样书写太丑陋了,需要我们自己捕获异常,控制next,引出for循环

四、for循环

1 #基于for循环,我们完全可以不再依赖索引去取值了

2 dic={'a':1,'b':2,'c':3}3 for k indic:4 print(dic[k])5 #for循环的工作原理

6 """

7 1、执行in对象的dic._iter_()方法,得到迭代器对象iter_dic8 2、执行next(iter_dic)将得到的值赋值给k,然后执行循环代码9 3、重复2过程,直到捕捉到异常StopIteration,循环结束10 """

五、迭代器的优缺点

优点:

1、提供一种统一的,不依赖于索引的迭代方式

2、惰性计算、节省内存

缺点:

1、无法获取长度(只有在next完毕才知道到底有几个值)

2、一次性的不能往前走,只能往后退

六、生成器

1 #只要函数内部包含有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部的代码,生成器就是迭代器

2 deffun():3 print("==========>first")4 yield 1

5 print("==========>second")6 yield 2

7 print("==========>third")8 yield 3

9 print("==========>end")10 g=fun()11 print(g)

python迭代器和生成器_Python之迭代器和生成器相关推荐

  1. python迭代器面试题_Python面试题之生成器/迭代器

    原博文 2017-07-02 21:36 − 1.为什么要有生成器? 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占 ...

  2. python迭代器和生成器_python中迭代器和生成器。

    前言:很多python教程中,对python的解释不容易理解,本文记录自己的理解和体会,是对迭代器和生成器的初步理解. 迭代器: 迭代器的实质是实现了next()方法的对象,常见的元组.列表.字典都是 ...

  3. python迭代器与生成器_Python的迭代器和生成器

    一 概要 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set ...

  4. python迭代器创建序列_Python 中迭代器与生成器实例详解

    Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的 ...

  5. python迭代器与生成器_python的迭代器与生成器实例详解

    本文以实例详解了python的迭代器与生成器,具体如下所示: 1. 迭代器概述: 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...

  6. python加减法器课程报告_python实现随机加减法生成器

    本文实例为大家分享了python实现随机加减法生成器的具体代码,供大家参考,具体内容如下 为了让外甥女练习算术,用python给她写了个自动出加减法的小程序. 该程序使用了文字转语音的库pyttsx, ...

  7. python中文讨论组_python - 中文名字随机生成器

    伊谢尔伦2017-04-18 09:41:043楼 下班没事干凑凑热闹, 说说我看到这个问题的思路及抄码记录 1. 为了让生成的名字看起来像名字, 就像一楼说的, 要分姓和名 2. 先整姓 找找百家姓 ...

  8. python yield用法_Python中迭代器和生成器的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  9. python生成器和装饰器_python三大法器:生成器、装饰器、迭代器

    迭代器 迭代的概念 使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表获取值的过程 使用for循环遍历取值的对象叫做可迭代对象, 比如:列表.元组.字典.集合.range.字符串 判断 ...

最新文章

  1. 将TVM集成到PyTorch
  2. 中国CIO最关心的八大问题(下)
  3. 使用“1”个参数调用“DownloadString”时发生异常:“操作超时”
  4. 【Leetcode】那些年四数之和下的评论
  5. 搭建卷积神经网络怎么确定参数_AI入门:卷积神经网络
  6. android studio sugar,Android | Sugar 的介绍和简单使用
  7. tune kubernetes eviction parameter
  8. hyperledger的个人分享
  9. java 通过System.getProperties()获取系统参数
  10. noi 8462 大盗阿福
  11. java看懂程序_手把手教你运行第一个 Java 程序,看不懂你来骂我!
  12. Android 抓包工具
  13. android圆形头像边框,利用Android中BitmapShader制作自带边框的圆形头像
  14. 【二分查找】详细讲解(C语言折半查找)
  15. 2022-2028全球硅胶线行业调研及趋势分析报告
  16. 搭建免费私人服务器---用你的笔记本做服务器
  17. c语言订餐系统项目范例,C语言订餐系统.doc
  18. 计算机微机原理心得体会,微机原理课设体会心得体会
  19. 全网最详细软件测试接口测试用例设计-怎么编写-模板(最详全)
  20. 一个老程序员和他的1000万小挑战

热门文章

  1. mysql 各表charset不同_MySQL表字段字符集不同导致的索引失效问题
  2. 计算机科学与技术初级知识,计算机科学与技术专业课程有哪些
  3. linux mysql设置编码_linux下修改mysql编码
  4. python dataframe切片_python-如何避免“试图在DataFrame的切片副本上设置值”?
  5. Java黑皮书课后题第8章:*8.8(所有最近的点对)修改程序清单8-3,找出所有所有具有最小距离的点对。下面是一个运行示例
  6. Java黑皮书课后题第3章:*3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧、右侧,或者在该线段上
  7. C语言学习之用函数处理,而且用指针类型的数据作函数参数,对输入的两个整数按大小顺序输出
  8. 视觉硬件 - 相机 镜头 选型
  9. 坑爹的jquery ui datepicker
  10. PageRank算法简介及Map-Reduce实现