目录

Iterable可迭代对象

如何判断对象是否是可迭代对象Iterable

Iterator迭代器

如何判断对象是否迭代器Iterator

将Iterable转换成Iterator


Iterable可迭代对象

如果给定一个 list列表 或 tuple元组 ,我们可以通过 for 循环来遍历这个 list 或 tuple ,这种遍历我们称为迭代(Iteration),可以直接作用于 for 循环的对象统称为 可迭代对象。当我们使用 for 循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是 list 还是其他数据类型。

a=[1,2,3,4,5]
b=(6,7,8,9,10)
for i in a:
print(i)
for i in b:
print(i)

如何判断对象是否是可迭代对象Iterable

那么,如何判断一个对象是可迭代对象呢?可以通过 collections 模块的 Iterable 类的 isinstance()方法判断:

from collections import Iterable
>>isinstance(123,Iterable) #判断整数是否是可迭代对象
False
>>isinstance('abc',Iterable) #判断字符串是否是可迭代对象
True
>>isinstance([1,2,3],Iterable) #判断列表是否是可迭代对象
True
>>isinstance((1,2,3),Iterable) #判断元组是否是可迭代对象
True
>>isinstance({'name':'xie','age':10},Iterable) #判断字典是否是可迭代对象
True

Iterator迭代器

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

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

Iterator迭代器一定是Iterable可迭代的,但是Iterable可迭代对象不一定是Iterator迭代器

常见类型如str、list、tuple、dict等是 Iterable 但不是 Iterator

如何判断对象是否迭代器Iterator

那么,如何判断一个对象是可迭代对象呢?可以通过 collections 模块的 Iterator 类的isinstance()方法判断:

from collections import Iterator
>>isinstance('abc',Iterator) #判断字符串是否是迭代器
False
>>isinstance([1,2,3],Iterator) #判断列表是否是迭代器
False
>>isinstance((1,2,3),Iterator) #判断元组是否是迭代器
False
>>isinstance({'name':'xie','age':10},Iterator) #判断字典是否是迭代器
False

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

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

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

将Iterable转换成Iterator

可以利用 iter( ) 函数将 Iterable 转换成 Iterator 对象

iter(Iterable)--->Iterator

from collections import Iterator
>>isinstance(iter('abc'),Iterator) #判断字符串是否是迭代器
True
>>isinstance(iter([1,2,3]),Iterator) #判断列表是否是迭代器
True
>>isinstance(iter((1,2,3)),Iterator) #判断元组是否是迭代器
True
>>isinstance(iter({'name':'xie','age':10}),Iterator) #判断字典是否是迭代器
True

Python中的可迭代Iterable和迭代器Iterator的更多相关文章

  1. Python中的可迭代对象,迭代器与生成器

    先来看一张概览图,关于容器(container).可迭代对象(Iterable).迭代器(iterator).生成器(generator). 一.容器(container) 容器就是一个用来存储多个元 ...

  2. Python中的可迭代对象与迭代器对象

    刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...

  3. Python:容器、迭代对象、迭代器、生成器及yield关键字

            在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list, ...

  4. Python中的可迭代对象

      Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...

  5. Python中的可迭代对象/迭代器/For循环工作机制/生成器

    本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...

  6. 【转】Python中自定义可迭代对象

    python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...

  7. Python 中的重点来了 : 迭代器 生成器

    可迭代的对象:带有__iter__方法的,就是迭代器.字符串,列表,元祖,字典,集合,文件,都是可迭代的 可迭代的对象使用了__iter__方法的,就是迭代器,带有__next__,__iter__方 ...

  8. python函数之可迭代对象、迭代器的判断

    怎么判断一个对象是可迭代对象还是迭代器 例子 from collections import Iterable, Iterator lst = ['Today is Wednesday', 'Tomo ...

  9. python基础一 ------可迭代对象和迭代器对象

    可迭代对象和迭代器对象:前者生成后者 比喻:10个硬币都可以一一数(迭代),放入到存钱罐(可以取钱的那种),那这个存钱罐就是一个迭代器对象 需求:从网络抓取各个城市气温信息,并依次显示若依次抓取较多的 ...

随机推荐

  1. Java split 根据指定字符串分隔成list数组的用法

    String str="Java string split test";      String[] strarray=str.split(" ");//得到一 ...

  2. Java 重入锁和读写锁

    本文部分摘自<Java 并发编程的艺术> 重入锁 重入锁 ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁.除此之外,该锁还支持获取锁时 ...

  3. 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

    第1章  Selenium自动化测试框架入门 1.1  Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...

  4. 【Django笔记1】-视图(views)与模板(templates)

    视图(views)与模板(templates) 1,视图(views) ​ 将接收到的数据赋值给模板(渲染),再传递给浏览器.HTML代码可以直接放在views.py(文件名可任意更换),也可以放在t ...

  5. 此博客使用的CSS样式详解!

    此博客使用的CSS样式详解! 页面使用的博客园模板为:LuxInteriorLight,可以在博客皮肤里找到. 页首屏蔽广告代码 <script>console.log("顶部标 ...

  6. 什么是一致性hash?

    一致性hash 前言 说出来大家可能不相信,我昨天做梦梦到自己在面试,然后面试官问了我这个问题哈哈~然后我就打算按照自己的理解写一写.如果有写的不对的欢迎大家指正! 直接开始 普通hash算法 普通h ...

  7. 2021软工-调研作业-Notion

    2021软工-调研作业-Notion 项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 学习软件开发的工业化 ...

  8. (十二)struts2的类型转换

    所有的MVC框架,都属于表现层的解决方案,都需要负责收集用户请求参数,并将请求参数传给应用的控制器组件. 这时问题出现了,所有的请求参数都是字符串类型数据,因此MVC框架必须具备将这些字符串请求参数转 ...

  9. OAuth2.0理解和用法

    现在网络的资料到处都是,很容易搜索到自己想要的答案.但答案通常只能解决自己一部分的问题.如果自己想要有一套自己的解决方案,还得重新撸一遍靠谱. 我需要学下OAuth2.0吗? 没看之前以为OAuth2 ...

  10. 【笔记】《Redis设计与实现》chapter16 Sentinel

    16.1 启动并初始化Sentinel 初始化服务器 Sentinel本质上只是运行在特殊模式下的Redis服务器,启动第一步就是初始化一个普通的Redis服务器 使用Sentinel专用代码 使用r ...