python3迭代器是什么_Python3.7之迭代器
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之迭代器相关推荐
- python3 内置函数map 返回的迭代器转为列表
python3 内置函数map 返回的是迭代器,python2 返回的才是列表, 在python3中想要使用需要把迭代器在转换成列表 list_a = [1, 2, 3, 4, 5]def add(n ...
- python迭代器两个基本方法_python迭代器如何实现
迭代是Python最强大的功能之一,是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有 ...
- python迭代器好处_关于Python中迭代器的作用
迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...
- python生成器与迭代器的区别_python生成器和迭代器的区别
匿名用户 1级 2016-10-13 回答 迭代器和生成器都是Python中特有的概念,迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个可迭代的对象必须是定义 ...
- 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...
一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...
- python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器
很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...
- mysql迭代器_迭代器是什么,C++ STL迭代器(iterator)用法详解
无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用"迭代器(iterator)"来实现.那么,迭代器到底是什么呢? 我们知道,尽管不同 ...
- 迭代器的定义与自定义一个迭代器
迭代器 1,如何让一个对象成为一个可以迭代的对象? 该对象的内部需要实现 __iter__方法 代码示例: from collections import Iterable, Iterator cla ...
- C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))
一.迭代器的头文件 所有的容器都定义有自己的iterator类型,因此如果单单使用容器,只需要包含对应容器的头文件即可 不过有些特殊的iterator,被定义在头文件<iterator>中 ...
- python迭代器和生成器的作用_python迭代器与生成器的详细介绍
一.什么玩意是迭代器? 先说说什么是迭代吧,迭代就是一件事情重复很多次,比如说for循环. for循环可以对一切有iter方法的对象进行迭代,那么什么是iter方法呢? 一个对象是否可迭代,全都取决于 ...
最新文章
- 产品设计技术公开-一种扼杀对手的方式
- 致所有IT工程师的信(网络工程师的发展方向)
- Java面试题基础知识(收集)
- 深入理解JavaScript模拟私有成员
- 几年前的代码发现一个BUG: 整数相除结果不能默认转换为浮点数
- affiliate的使用方式
- Swift--控制流与oc不同的地方
- linux shell 版本信息,查看各种Linux系统版本信息的Shell命令
- 关于动态规划,你该了解这些!
- (day 49 - 另起数组牺牲空间换取时间 ) 剑指 Offer 66. 构建乘积数组
- 20220915使用python3下载ts格式的视频切片文件
- WebService入门(二)wsimport的使用
- 一类Chen混沌系统的混沌吸引子——MATLAB实现
- iPhone已停用,请连接iTunes
- 如何成为靠谱的DotNet/C#程序员 (sunxiunan)(zz)
- 京东换新 Logo :脸蛋胖了,脖子粗了
- ROS系列教程三:roslaunch文件及参数服务器
- MySQL语句面试(二)
- 海思Hi3519A开发(6.sample内容介绍)
- 新氧在“看脸的时代”用精细化运营赋能医美产业
热门文章
- 攻防世界 Web_php_include write up
- ASP.NET Core中使用Csp标头对抗Xss攻击
- Sublime Text 3.1.1 Build 3176 注册码破解
- Queue与生产者消费者模型
- Oracle----oracle小知识总结
- 超级有用的git reset --hard和git revert命令
- [物理学与PDEs]第1章第9节 Darwin 模型 9.3 Darwin 模型
- ADO.NET数据访问方式:SqlDataReader
- 二叉树非递归遍历算法(II)中序
- 分布式文件存储FastDFS之安装Nginx实现文件访问