可迭代对象(iterable)迭代器对象(iterator)的概念是如此相似,常常容易混淆,今天就来梳理区分一下。

可迭代对象

可迭代对象简单来说这个对象是可以迭代的,例如 list,tuple,set,dict,str 等。可以利用 for 来循环的对象都是可迭代对象。

可以利用 isinstance() 函数来判断对象的类型 :

>>> from collections import Iterable>>> isinstance([],Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance(1,Iterable)
False

迭代器对象

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

在说迭代器之前,首先看一下什么是生成器,生成器可以说是一种可以根据推导算法来推出当前值,它存储的是推导算法推出来的当前值,因此,与列表生成式不同:

1.生成器存储的是当前值,因此占用内存空间比较小。

2.不用事先计算要存多少数据,而列表生成式和数组类似,事先要考虑存多少数据进去,存入数据以后,空间大小就固定了。

3.列表生成式存储的数据有限,而生成器由于存储的是算法,因此可以不断通过算法推导下一个值,也就是说,生成器可以存储的数据是无限的。

生成器(generator)有两种构建方法:

1.通过小括号()构建,也就是将生成器的 [] 直接改成 ()就得到一个迭代器。

# 使用小括号()创建生成器
>>> a = [x for x in range(3)]
>>> a
[0, 1, 2]
>>> b = (x for x in range(3))
>>> b
<generator object <genexpr> at 0x10c8ee0c0>

2.在函数中使用 yield 构建。

# 在函数中添加 yield 构建生成器
>>> def odd():
...     yield 1
...     yield 3
...     yield 5
...
>>> c = odd
>>> c
<function odd at 0x10c7e6620>
>>> d = odd()
>>> d
<generator object odd at 0x10c8ee1b0>

生成器可以通过 next() 来不断获取下一个值,直到没有值,抛出 StopIteration 异常。

>>> next(a)
0
>>> next(a)
1
>>> next(a)
2
>>> next(a)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration
>>> next(d)
1
>>> next(d)
3
>>> next(d)
5
>>> next(d)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

因此,生成器都是迭代器对象(iterator),而迭代器对象无疑又是可迭代的,使用 for 循环对迭代器对象进行迭代,不会抛出异常,也不会抛出一个值就中断,而是一次输出迭代器中的所有值。

for i in a:print(i)

总之,迭代器对象是一个有序数据流,提前不知道他的长度,他是惰性计算的,只有需要返回下一个数据的时候,才会计算并返回数据。

可迭代对象和迭代器对象相关推荐

  1. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  2. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现

    可迭代对象 首选确保for循环的in后面是一个可迭代对象,这样就能通过python内置函数iter()得到一个迭代器对象(iterator) 我们分别把列表list_test和字符串str_test分 ...

  3. python迭代-可迭代对象与迭代器对象

    可迭代对象与迭代器对象 问题举例 某软件要求,从网络抓取各个城市的气温信息,并依次显示: 北京:15~22 上海:18~23 ...... 如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会 ...

  4. python——常见内置函数、可迭代对象与迭代器对象

    目录 一.常见内置函数 1.abs() 2.all()与any() 3.bin() oct() hex() 4.int() 5.bytes() 6.callable() 7.chr() ord() 8 ...

  5. python中常用的内置函数,可迭代对象,迭代器对象

    知识点1 :常用内置函数 1 常用内置函数的实际应用 1.1 abs() 返回值是一个绝对值,参数可以是整数和浮点数,如果参数是一个复数,则返回它的模. print(abs(-12.3)) # 12. ...

  6. 可迭代对象与迭代器对象

    可迭代对象与迭代器对象 1 > 常见的内置函数2 1.1 > help() 查看注释信息 1.2 > id() 返回一串相当于内存地址的数字 1.3 > int() 类型转换. ...

  7. 十八、可迭代对象、迭代器对象和生成器

    可迭代对象.迭代器对象和生成器 一 可迭代对象 二 迭代器对象 三 迭代器优缺点 三 for循环原理 四 异常处理 4.1 什么是异常 4.2 异常操作 4.2.1 语法 4.2.2 实际操作 4.2 ...

  8. Python可迭代对象和迭代器对象详解

    1.可迭代对象 ''' 迭代对象是一个自身可迭代(__iter__)或者序列(_getitem__) '''# 迭代例子,列表和字符串是可迭代对象 l = [1, 2, 3, 4] s = 'abcd ...

  9. 可迭代对象、迭代器与生成器

    迭代器 什么是迭代器 迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果. 迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值. 为什么用迭代器 为了找出一种通用的&am ...

最新文章

  1. usaco Beef McNuggets
  2. linux 调试利器gdb, strace, pstack, pstree, lsof
  3. eclipse中Tomcat启动了 但看不到tomcat首页
  4. 012_SpringBoot视图层技术thymeleaf-条件判断
  5. 在Python中使用XGBoost
  6. python库怎么绘画_python基础,安装并使用matplotlib库画图
  7. java算法----0至9这十个数组成两个三位数和一个四位数
  8. STL:Numberic_limit()
  9. .net mvc actionresult 返回字符串_ASP.NET Core中的Action的返回值类型
  10. java class api 中文乱码_SpringMVC之springmvc原始api,请求中文乱码问题
  11. IAR使用技巧 之 快捷键批量更换指定字符(以及Keil的全局替换功能)
  12. 监狱干警定位管理系统
  13. 【Pr】视频剪辑学习记录——导出
  14. 第二人生的源码分析(二十)显示人物名称
  15. springBoot简单使用SpringData的jdbc和简单使用durid
  16. java 微信接收消息_Java后台与微信公众号交互----接收并处理微信客户端发送的请求...
  17. 请求服务器显示非法请求,请求被服务器识别为非法请求, 但使用 postman/curl 可以正常通过...
  18. google订阅消息推送
  19. Chosen by god 【组合数打表,快速幂,求逆元】
  20. proc_create的使用方法

热门文章

  1. 怎么给java加上声音_我想给视频加上自己的声音 如何给视频加配音 教你两招配音的方法...
  2. WPS如何快速删除所有空格
  3. 门禁一体机中应用的触摸IC
  4. C++获取注册表IE浏览器历史记录
  5. Route::controller和Route::resource
  6. 魔兽争霸Trigger学习教程(1)
  7. 哈工大操作系统实验总结
  8. Java:字符输入流、字符输出流
  9. 机器学习PAI眼中的《人民的名义》
  10. notepad如何新建php,notepad怎样使用教程