Python3.7之迭代器

一、什么是迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

二、可迭代对象

以直接作用于 for 循环的数据类型有以下几种:

一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

一类是 generator ,包括生成器和带 yield 的generator function。

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable,可迭代的意思就是可遍历、可循环。

可以使用isinstance()判断一个对象是否是Iterable对象:

from collections.abc import Iterable

print(isinstance([], Iterable))

print(isinstance({}, Iterable))

print(isinstance('123', Iterable))

print(isinstance((x for x in range(5)), Iterable))

print(isinstance(100, Iterable))

'''

True

True

True

True

False

'''

三、iter()

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

生成器都是 Iterator 对象,但 list 、dict 、str 虽然是 Iterable 、却不是 Iterator 。

把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数:

>>> isinstance(iter([]), Iterator)

True

>>> isinstance(iter('abc'), Iterator)

True

你可能会问,为什么list、dict、str等数据类型不是Iterator?

这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

四、小结

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

python3迭代器是什么_Python3.7之迭代器相关推荐

  1. python3 内置函数map 返回的迭代器转为列表

    python3 内置函数map 返回的是迭代器,python2 返回的才是列表, 在python3中想要使用需要把迭代器在转换成列表 list_a = [1, 2, 3, 4, 5]def add(n ...

  2. python迭代器两个基本方法_python迭代器如何实现

    迭代是Python最强大的功能之一,是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有 ...

  3. python迭代器好处_关于Python中迭代器的作用

    迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...

  4. python生成器与迭代器的区别_python生成器和迭代器的区别

    匿名用户 1级 2016-10-13 回答 迭代器和生成器都是Python中特有的概念,迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个可迭代的对象必须是定义 ...

  5. 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...

    一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...

  6. python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器

    很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...

  7. mysql迭代器_迭代器是什么,C++ STL迭代器(iterator)用法详解

    无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用"迭代器(iterator)"来实现.那么,迭代器到底是什么呢? 我们知道,尽管不同 ...

  8. 迭代器的定义与自定义一个迭代器

    迭代器 1,如何让一个对象成为一个可以迭代的对象? 该对象的内部需要实现 __iter__方法 代码示例: from collections import Iterable, Iterator cla ...

  9. C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))

    一.迭代器的头文件 所有的容器都定义有自己的iterator类型,因此如果单单使用容器,只需要包含对应容器的头文件即可 不过有些特殊的iterator,被定义在头文件<iterator>中 ...

  10. python迭代器和生成器的作用_python迭代器与生成器的详细介绍

    一.什么玩意是迭代器? 先说说什么是迭代吧,迭代就是一件事情重复很多次,比如说for循环. for循环可以对一切有iter方法的对象进行迭代,那么什么是iter方法呢? 一个对象是否可迭代,全都取决于 ...

最新文章

  1. 产品设计技术公开-一种扼杀对手的方式
  2. 致所有IT工程师的信(网络工程师的发展方向)
  3. Java面试题基础知识(收集)
  4. 深入理解JavaScript模拟私有成员
  5. 几年前的代码发现一个BUG: 整数相除结果不能默认转换为浮点数
  6. affiliate的使用方式
  7. Swift--控制流与oc不同的地方
  8. linux shell 版本信息,查看各种Linux系统版本信息的Shell命令
  9. 关于动态规划,你该了解这些!
  10. (day 49 - 另起数组牺牲空间换取时间 ) 剑指 Offer 66. 构建乘积数组
  11. 20220915使用python3下载ts格式的视频切片文件
  12. WebService入门(二)wsimport的使用
  13. 一类Chen混沌系统的混沌吸引子——MATLAB实现
  14. iPhone已停用,请连接iTunes
  15. 如何成为靠谱的DotNet/C#程序员 (sunxiunan)(zz)
  16. 京东换新 Logo :脸蛋胖了,脖子粗了
  17. ROS系列教程三:roslaunch文件及参数服务器
  18. MySQL语句面试(二)
  19. 海思Hi3519A开发(6.sample内容介绍)
  20. 新氧在“看脸的时代”用精细化运营赋能医美产业

热门文章

  1. 攻防世界 Web_php_include write up
  2. ASP.NET Core中使用Csp标头对抗Xss攻击
  3. Sublime Text 3.1.1 Build 3176 注册码破解
  4. Queue与生产者消费者模型
  5. Oracle----oracle小知识总结
  6. 超级有用的git reset --hard和git revert命令
  7. [物理学与PDEs]第1章第9节 Darwin 模型 9.3 Darwin 模型
  8. ADO.NET数据访问方式:SqlDataReader
  9. 二叉树非递归遍历算法(II)中序
  10. 分布式文件存储FastDFS之安装Nginx实现文件访问