一.迭代对象

1.概念

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

2.可以直接作用于for循环的数据类型

(1)集合类数据类型,如list, tuple, dict, set, str等

(2)generator,包括生成器和带yield的generator function.

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

3.判断一个对象是不是可迭代对象(Iterable)

可以使用isinstance,需要导入模块
from collections import Iterator
from collections import Iterable

(1)判断 str 类型是不是可迭代对象
isinstance('',Iterable)
isinstance('abc',Iterable)
print(isinstance('',Iterable)) # True
print(isinstance('abc',Iterable)) # True
(2)判断 list 类型是不是可迭代对象
isinstance([],Iterable)
isinstance([1,2,3,4],Iterable)
print(isinstance([],Iterable)) # True
print(isinstance([1,2,3,4],Iterable)) # True
(3)判断 元组 类型是不是可迭代对象
isinstance(tuple(),Iterable)
isinstance((1,2,3,4),Iterable)
print(isinstance(tuple(),Iterable))
print(isinstance((1,2,3,4),Iterable))
(4)判断 集合 类型是不是可迭代对象
isinstance(set(),Iterable)
isinstance((1,2,3,4),Iterable)
print(isinstance(set(),Iterable)) # True
print(isinstance((1,2,3,4),Iterable)) # True
(5)判断 字典 类型是不是可迭代对象
isinstance({},Iterable)
isinstance({'name':'wanghua','age':28},Iterable)
print(isinstance({},Iterable)) # True
print(isinstance({'name':'wanghua','age':28},Iterable)) # True
(6)判断 for 循环是不是可迭代对象
isinstance((x for x in range(10)), Iterable)
print(isinstance((x for x in range(10)), Iterator)) # True

二. 迭代器

1.概念

迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
迭代器是在python2.2中被加入的,它为类序列对象提供了一个类序列的接口。有了迭代器可以迭代一个不是序列的对象,因为他表现出了序列的行为。当在python中使用for循环迭代一个对象时,调用者几乎分辨不出他迭代的是一个迭代器对象还是一个序列对象,因为python让他(迭代器)像一个序列那样操作。

2.判断一个对象是否是迭代器(Iterator). 可以使用isinstance,需要导入模块from collections import Iterator

3.判断 for 循环是不是迭代器

isinstance((x for x in range(10)), Iterator)
print(isinstance((x for x in range(10)), Iterator)) # True
成器都是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是永远不可能存储全体自然数的

Python迭代对象与迭代器的更多相关文章

  1. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  2. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...

  3. 完全理解Python迭代对象、迭代器、生成器

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

  4. 理解Python迭代对象、迭代器、生成器

    作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...

  5. [转载]完全理解Python迭代对象、迭代器、生成器

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

  6. Python 迭代对象、迭代器、生成器

    原文出处: liuzhijun 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文 ...

  7. Python迭代对象、迭代器、生成器

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

  8. 完全理解Python 迭代对象、迭代器、生成器

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

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

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

随机推荐

  1. 查看selinux的状态

    sh-4.1# getenforce Disabled sh-4.1# getenforce Disabled 永久方法 – 需要重启服务器 修改/etc/selinux/config文件中设置SEL ...

  2. makefile之patsubst函数

    格式:$(patsubst pattern,replacement,text) 名称:模式字符串替换函数--patsubst. 功能:查找text中的单词(单词以"空格".&quo ...

  3. poj 1821 Fence(单调队列)

    题目链接:http://poj.org/problem?id=1821 题目分析来自:http://blog.csdn.net/tmeteorj/article/details/8684453 连续的 ...

  4. sscanf及sprintf

    在程序中,我们肯定会遇到许多处理字符串的操作,当然C++中的string类已经做了很好了,但是也不要忘了C中的sscanf和sprintf 这两个函数用法跟printf和scanf用法很相似,只不过数 ...

  5. phpmyadmin通过日志文件拿webshell

    该方法非原创.只是给大家分享一下姿势.如果知道得就当复习了,不知道得就捣鼓捣鼓. 前提:条件是root用户. 思路:就是利用mysql的一个日志文件.这个日志文件每执行一个sql语句就会将其执行的保存 ...

  6. 小型云服务器搭建GitLab遇到的坑

    云服务商:腾讯云,搞活动买的 3年800块钱,和同时一人一台 配置:1C.1G.50G 用三年,挺划算的 项目中以前一直使用SVN作为代码版本控制,秉着程序员做到老学到老的精神,想尝试一下先进的GIT ...

  7. vs2003 不断提示 已过期 问题

    工作时曾遇到使用 vs2003 生成后,点击"调试“或者"执行“后不断提示 类似“已过期,是否要重新生成”这样的问题. 当时的情况是 :我要实现的功能和"时间" ...

  8. 用Eclipse的tomcat插件启动tomcat时报错:

    用Eclipse的tomcat插件启动tomcat时报错: FATAL ERROR in native method: JDWP No transports initialized, jvmtiErr ...

  9. 获取一个Assembly中的命名空间列表

    通过System.Reflection.Assembly类中提供的方法和属性不能直接获取组件中的命名空间列表.但有方法可以直接获得Assembly中的所有类型,我们便可以通过获取的类型来得到命名空间名 ...

  10. 正确的关机方法: sync, shutdown, reboot, halt, poweroff, init

    正常情况下,要关机时需要注意底下几件事: 观察系统的使用状态: 如果要看目前有谁在在线,可以下达『who』这个命令,而如果要看网络的联机状态,可以下达 『 netstat -a 』这个命令, 而要看背 ...