迭代器

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

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

>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance('abc', Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False

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

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

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

>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False

生成器都是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的for循环本质上就是通过不断调用next()函数实现的,例如:

for x in [1, 2, 3, 4, 5]:pass

实际上完全等价于:

# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:try:# 获得下一个值:x = next(it)except StopIteration:# 遇到StopIteration就退出循环break

转载于:https://www.cnblogs.com/friday69/p/9235520.html

python—迭代器相关推荐

  1. python迭代器生成器 学会再缩短一半开发效率 看看大牛是怎么写的

    一.迭代 什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历 ...

  2. 简单介绍python迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...

  3. python迭代器使用_python迭代器的使用方法实例

    什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...

  4. python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍

    Python迭代器和生成器介绍迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration ...

  5. python迭代器与生成器答案_史上最全 Python 迭代器与生成器

    原标题:史上最全 Python 迭代器与生成器 作者:浪子燕青 链接:http://www.langzi.fun/迭代器与生成器.html 迭代器与可迭代对象 概念 迭代器:是访问数据集合内元素的一种 ...

  6. Python 迭代器和 C++ 迭代器,最大的不同竟然是......

    作者 | 樱雨楼 责编 | 胡巍巍 前言 迭代器(Iterator)是 Python 以及其他各种编程语言中的一个非常常见且重要,但又充满着神秘感的概念.无论是 Python 的基础内置函数,还是各类 ...

  7. [转载] python迭代器

    参考链接: Python迭代器 迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器有两个基本的方法:iter() 和 next(). 使用对象内置的__iter__()方法生成迭代器 it = n ...

  8. python迭代器_Python迭代器

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

  9. python迭代器的设计

    2019独角兽企业重金招聘Python工程师标准>>> python迭代器的设计 跟黄哥学python编程系列文章之迭代器 如何自定义迭代器,有2个必要条件 1.自定义类有一个方法_ ...

  10. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

最新文章

  1. C++ reinterpret_cast,const_cast等 显式类型转换总结
  2. 谷歌大中华区总裁李开复今日离职
  3. html连在一起的选择器,请问关于css选择器的问题:两个类选择器连在一起是什么意思?...
  4. java中_null和“”的区别详解
  5. 京瓷Kyocera TASKalfa 6002i 一体机驱动
  6. 修改Android系统配置文件build.prop
  7. CentOS8设置网络安装源
  8. Python实现摇骰子效果
  9. 如何做云班课上的计算机作业,云班课如何提交课后作业 作业提交教程
  10. “二舅”火了,自媒体短视频“爆火”的基本要素,你知道吗?
  11. java 调节color亮度算法_照片处理-饱和度调节
  12. Bootstrap相关案例、教程、设计器
  13. 短信UI--短信设置界面之彩信设置
  14. 全球及中国UVC消毒系统行业竞争力调查及投资商机研究报告2021-2027年版
  15. 电视上的腾讯会员和手机上的一样吗
  16. 各大电商平台API数据,淘宝天猫的api明细接口
  17. python制作mac小软件_python生成mac os app记录-py2app
  18. 2.人工智能任务分类
  19. IDL--辐射定标(Radiometric Calibration )
  20. mysql的full join_mysql实现full join

热门文章

  1. java(十六) 对象的this引用
  2. (二)简单的登陆注册系统--增加验证码部分
  3. sonar 代码质量管理平台
  4. inotify 实时的Linux文件系统事件监控
  5. TreeMap之floorKey
  6. 睡觉觉睡觉睡觉计算机手机,孩子爱睡觉怎么回事
  7. C#与java的比较
  8. 【正一专栏】马蓉到底对王宝强还有啥感情?
  9. uboot中IDE移植
  10. hive 行转列和列转行的方法_读离线和实时大数据开发实战,为你揭开 Hive 优化实践的神秘面纱...