Python迭代对象与迭代器
一.迭代对象
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迭代对象与迭代器的更多相关文章
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- 完全理解 Python 迭代对象、迭代器、生成器
完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun 本文源自RQ作者 ...
- 完全理解Python迭代对象、迭代器、生成器
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...
- 理解Python迭代对象、迭代器、生成器
作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...
- [转载]完全理解Python迭代对象、迭代器、生成器
译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...
- Python 迭代对象、迭代器、生成器
原文出处: liuzhijun 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文 ...
- Python迭代对象、迭代器、生成器
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...
- 完全理解Python 迭代对象、迭代器、生成器
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...
- Python中的可迭代对象与迭代器对象
刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...
随机推荐
- ecmall程序结构图与数据库表分析
以下是ecmall的程序结构图,看了这张图,我们可以清楚的知道ecmall的程序结构. ECMALL数据库主要表如下所示: ecm_acategory:存放的是商城的文章分类.ecm_address: ...
- plist 与 JOSN的解析
- 内部系统间调用client包的封装方法
1.何为client 公司内部的系统调用,如果采用http直接调用,会非常不方便,而且不规范,接口升级或者变动,系统间的改动也是相当麻烦.所以在系统间采用client的互相调用,调用简单,如下: 获取 ...
- flask os.environ 的作用
使用环境变量取值, 是为了增强系统的适应性, 在某些场景下, 设置环境变量比较方便. 假如, 你有一套代码, 部署在不同的系统中, 恰好这些系统有权限且很容易地设置环境变量, 那么, 这时候通过环境变 ...
- ddd 架构设计——abp
一.为什么要分层 分层架构是所有架构的鼻祖,分层的作用就是隔离,不过,我们有时候有个误解,就是把层和程序集对应起来,就比如简单三层架构中,在你的解决方案中,一般会有三个程序集项目:XXUI.dll.X ...
- jQuery常用技巧
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用 ...
- java 理解java的三大特性之继承
继承定义了类如何相互关联,共享特性.对于若干个相同或者相识的类,我们可以抽象出他们共有的行为或者属相并将其定义成一个父类或者超类,然后用这些类继承该父类,他们不仅可以拥有父类的属性.方法还可以定义自己 ...
- Map Labeler (poj 2296 二分+2-SAT)
Language: Default Map Labeler Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1815 Ac ...
- hdu 4706:Children's Day(模拟题,模拟输出大写字母 N)
Children's Day Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 4067(最小费用最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4067 思路:很神奇的建图,参考大牛的: 如果人为添加t->s的边,那么图中所有顶点要满足的条件都 ...