迭代器

一、可迭代对象

可直接作用于for循环类型:

集合数据类型,如 list,tuple,dict,set,string等

generator,包括生成器和带yield的函数

这些统称为可迭代对象,Iterable

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

True

>>> from collections import Iterable

>>> isinstance([],Iterable)

True

>>> isinstance({},Iterable)

True

>>> isinstance((),Iterable)

True

>>> isinstance("china",Iterable)

True

>>> isinstance(123,Iterable) #数字不是

False

>>> isinstance(range(10),Iterable)

True

>>> isinstance((x for x in range(10)),Iterable)

True

注:而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示      无法继续返回下一个值了。

二、迭代器

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

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

>>> isinstance([],Iterator)

False

>>> isinstance({},Iterator)

False

>>> isinstance((),Iterator)

False

>>> isinstance((x for x in range(10)),Iterator)

True

生成器都是Iterator对象,但是想list、dict、tuple、string虽然也是Iterable,却不是迭代器(Iterator)。

三、iter()函数

我们可以使用iter()函数将可迭代对象(Iterable)变成迭代器(Iterator)

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

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

True

>>> isinstance(iter({}),Iterator)

True

>>> isinstance(iter(()),Iterator)

True

>>> isinstance(iter("sssss"),Iterator)

True

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

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

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

四、可迭代对象的循环

g = (x for x in range(5))

for i in g:

print(i)

#其实相当于

it = iter([0,1,2,3,4])

#print(type(it))

while True:

try:

x = next(it)

print(x)

except StopIteration:

break

五、总结

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

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

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

python返回迭代器_python--迭代器相关推荐

  1. python列表迭代器_python迭代器生成器-迭代器和list区别

    迭代 生成 for循环遍历的原理 for循环遍历的原理就是迭代,in后面必须是可迭代对象 为什么要有迭代器 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但对于字典.集 ...

  2. python迭代器_Python迭代器

    python迭代器 Good day learners! In our previous tutorial, we learned about Python Operator Overloading. ...

  3. python iterable对象_Python迭代器Iterable判断方法解析

    迭代器(Iterable):能直接作用于for循环的对象,统称可迭代对象.例如:list.tuple.set.str.generator都是可迭代对象. 1.如何判断一个对象是否可迭代: # 如何判断 ...

  4. pythonzip是迭代器_Python迭代器和zip

    迭代器就像一个项目流.您只能一次查看流中的项目,并且只能访问第一个元素.要查看流中的某些内容,您需要将其从流中删除,一旦您从流的顶部获取内容,它就会从流中消失. 当您调用zip(i,i)时,zip首先 ...

  5. python 返回空格_Python面试之 is 和 == 的区别

    Python爬虫人工智能学习教程​www.python88.cn 面试实习生的时候,当问到 is 和 == 的区别时,很多同学都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致.本文我们来看一 ...

  6. python返回元组_python – numpy.where返回一个元组的目的是什么?

    当我运行此代码时: import numpy as np a = np.array([1, 2, 3, 4, 5, 6]) print(np.where(a > 2)) 获得一个指数数组是很自然 ...

  7. python返回上级_python 获取当前,上级,上上级路径(任何上级路径)

    我看了一些博客,对获得当前路径有很多方法,如os.getcwd()与os.path.abspath(r"."),其中os.path.abspath(r"..") ...

  8. python 返回列表_python返回列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 列表列表是python最常用的数据类型,它可以作为一个方括号内的逗号分隔值出现列 ...

  9. python字典items返回什么_Python 字典items返回列表,iteritems返回迭代器

    说明:items以列表方式返回字典中的键值对,iteritems以迭代器对象 返回键值对儿(Python3中不再支持): 字典items()方法和iteritems()方法,是python字典的内建函 ...

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

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

最新文章

  1. MySQL数据库相关命令
  2. JavaScript前端框架的思考
  3. rose 2003 7.0_安卓微信7.0.17正式版更新:十大新鲜功能~
  4. 37、Django实战第37天:404以及500页面配置
  5. 微信小游戏开发(9)- 分包加载
  6. elementUI+vue-cli el-table=》excel
  7. 1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  8. linux下tomcat部署
  9. ZooKeeper available but no active master location found
  10. 【LOJ6363】「地底蔷薇」【点双】【指数型生成函数】【扩展拉格朗日反演】【多项式幂函数】
  11. 添加MD5 密码加密
  12. PHP+Mysql+jQuery找回密码
  13. editplus使用php,EditPlus如何运行php文件
  14. 10分钟教你从零开始python_10分钟教你从零开始学python入门
  15. python计算加权平均分
  16. 目前能体验到的虚拟主播虚拟人脸形象有哪些?
  17. 发邮件+实习+简历+
  18. 国内B2C 26个经典购物网站商城收集
  19. webrtc QOS方法十二(接收端IDR帧请求)
  20. OpenGL(可编程管线):Bezier曲面

热门文章

  1. 作为一名普通程序员,在为为生计而奋斗,深漂的感触。@http://bbs.csdn.net/topics/390632368
  2. 如何完全卸载HbuilderX?
  3. java nextint括号_Java中关于nextInt()、next()和nextLine()的理解
  4. Mac PPPOE命令行连接
  5. java定义boolean命名_阿里规范:为何boolean类型变量命名禁用is开头
  6. python字符串赋值列表_python字符串赋值
  7. window.loaction.herf与ajax在下载文件时的区别
  8. 如何将计算机网络设置为家庭网络连接打印机共享,Win7系统如何设置打印机共享,详细图文步骤...
  9. ElementUI+el-dropdown函数触发事件
  10. bootstrap实现下拉框dropdown选中select option 美爆了