迭代:可以理解成循环,迭代一次,循环一次

根据所学知识我们知道,直接作用于for循环的数据类型有:

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

一类是generator,如,生成器和带yield的generator function

这些可以直接作用于for循环的对象统称为可迭代对象 Iterable,(听到可迭代对象可以理解为可用for循环的对象)

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

from collections import IterableIterable
<class 'collections.abc.Iterable'>  # 执行结果isinstance('abv', Iterable)
True   # 执行结果
isinstance(1233,  Iterable)
False # 执行结果

isinstance((i for i in range(10)),  Iterable)True  # 执行结果

  

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

*可以被next()函数调用并不断返回下一个值的对象(东西)叫迭代器:generator

所以生成器只是迭代器的一种,而且不只是生成器可以被next()调用,自己写的一个不是生成器的东西也可以被next()调用。

可以用isinstance() 判断一个对象是否为Iterabor对象:

from collections import Iteratorisinstance('abv', Iterator)
False   # 执行结果
isinstance(1233,  Iterator)
False # 执行结果
isinstance([],  Iterator)
False # 执行结果
isinstance({},  Iterator)
False # 执行结果isinstance((i for i in range(10)),  Iterator)
True  # 执行结果

  

生成器都是Iterabor对象,而list, str, dict 都只是Iterable,而不是 Iterator,把list, str, dict等Iterable变成Iterator,可以使用iter()函数:

isinstance(iter([]),  Iterator)
True # 执行结果
isinstance(iter({}),  Iterator)
True # 执行结果

为什么list,dict,str 等不是Iterator,

因为再pyton中,Iterator对象表示的是一个数据流(没有办法判断终点在哪里,无穷尽的,就是说产生这个数据的时候不知道什么时候结束,比如说时间就是一个时间流,而一个列表,字符串都是由一定长度的,字典是有一定大小的),形成一个迭代器的时候,不需要管内容,他会一直往走,没有终止条件。(也就是说如果一个变量是一个迭代器,len一下并不能算出他的长度)Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的。

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

总结:

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

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

集合数据类型如listdictstr等是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/xiaobai-yemao/p/8796011.html

python—函数进阶-迭代器相关推荐

  1. 好好学python·函数进阶(递归函数,回调函数,闭包函数,匿名函数,迭代器)

    函数进阶 递归函数 回调函数 闭包函数 特点 匿名函数 lambda 表达式 迭代器 iter() next() 迭代器的取值方案 迭代器取值特点,取一个少一个,直到都取完,最后再获取就会报错 检测迭 ...

  2. Python — 函数进阶(2)

    文章目录 函数进阶(2) 可迭代对象 什么是可迭代对象 可迭代对象的意义 可迭代对象的使用 迭代器 什么是迭代器 迭代器的优势 迭代器的劣势 怎么使用迭代器 生成器 什么是生成器 怎么使用生成器 以函 ...

  3. python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶

    一.函数基础函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数私信小编001即可获取Python学习资料01. 函数的快速体验 1.1 快速体验 所谓函数,就是 ...

  4. Python函数进阶(11)

    函数进阶 函数参数类型 不可变数据类型和可变数据类型自加的区别 1. 判断gl_num和gl_list的值 命名空间 作用域 全局变量和局部变量 global 和nonlocal关键字 内置函数 1. ...

  5. Python函数之迭代器

    一.Python迭代器 1.1.函数的运用 # 直接使用函数名其打印效果为函数在内存的地址 def f():print("Its Ok")print(f)# 函数名可以直接赋值给一 ...

  6. python函数进阶小结_Python-进阶-functools模块小结

    文档 地址 functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结 ...

  7. python函数进阶小结_python之函数进阶

    1. 今日内容 1.1 函数的参数 *的魔性用法 函数形参最终顺序 1.2名称空间 全局名称空间,局部名称空间,内置名称空间 取值顺序与加载顺序 作用域 内置函数:globals() locals() ...

  8. 2.3.12 Python 函数进阶-装饰器

    代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator) 本质上,decorator就是一个返回函数的高阶函数 所以,我们要定义一个能打印日志的decorator,可 ...

  9. Python函数进阶

    def eat(a,b,v,f,g): print(a,b,v,f,g) eat('方便面','包子','麻团','豆浆','咸菜') def eat(a,b,*args): # 聚合 打包 prin ...

最新文章

  1. maven中把依赖的JAR包一起打包(转)
  2. java程序员需要考证_泄题了!Java程序员最可能被考到的14个面试题
  3. OpenGL之仿“天体”运动渲染球体之间的旋转效果
  4. java 接口的访问权限_证明接口interface中定义的方法的访问权限为public
  5. 可做fft分析吗_小吃店生意好做吗,小吃业行情分析
  6. php预处理_如何用预处理让 PHP 更先进
  7. 怎样管理Lotus Domino
  8. x264源代码简单分析:滤波(Filter)部分
  9. 19.卷1(套接字联网API)---密钥管理套接字
  10. COPRA RF 2005 SR1最新版 (冷弯成型,轧辊设计)
  11. 1001系列之案例0001如何从淘宝销售数据集中挖掘有效信息
  12. 【历史上的今天】1 月 1 日:惠普诞生;互联网的规范化;百度成立
  13. Android判断是否可以使用外网
  14. HTML5-Drog和Drag
  15. Re.常系数齐次递推
  16. 第十届全国大学生GIS应用技能大赛上午(试题及参考答案)
  17. Mac 系统更新系统安装包损坏丢失,崩溃
  18. 小白学语句:省市区选择(带全国省市区数据)
  19. 网站可行性报告范文_鄂州编写可行性报告公司2020范文格式
  20. node下载文件 解压压缩包

热门文章

  1. 关于verilog中的signed类型
  2. 自定义Dialog(一)
  3. pku 3087 Shuffle'm Up 说的是bfs,其实就是个模拟
  4. IIS弹出服务没有及时响应启动或控制请求
  5. c语言位段sizeof,C语言位段的介绍
  6. vi php,linux编辑文件命令vi有什么作用
  7. win10添加java路径_小编解惑win10系统设置java路径变量的还原方案
  8. php imagick icon,php Imagick 生成图片
  9. 自学了python基础英语_Python自学路线图之Python基础自学
  10. php禁止伪造_php防止伪造的数据从URL提交方法