pythopn 迭代器

简介:
我们已经知道,可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为  可迭代对象  :Iterable。
 可以使用isinstance()判断一个对象是否是Iterable (可迭代对象) 对象:

>>> l=[1,2]
>>> l1=isinstance(l,list)    #判断相应字符类型  是返回True

>>> from collections import Iterable
>>> l=isinstance([], Iterable)
>>> print(l)            # True
>>> t=isinstance({}, Iterable)
>>> print(t)            # True
>>> d=isinstance('abc', Iterable)
>>> print(d)            # True
>>> g=isinstance((x for x in range(10)), Iterable)
>>> print(g)            # True
>>> s=isinstance(100, Iterable)
>>> print(s)            # False

而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,
直到最后抛出StopIteration错误表示无法继续返回下一个值了。
可以被next()函数调用并不断返回下一个值的对象称为     迭代器:Iterator。
可以使用isinstance()判断一个对象是否是Iterator(迭代器)对象:
>>> from collections import Iterator
>>> g=isinstance((x for x in range(10)), Iterator)
>>> print(g)           #True
>>> l=isinstance([], Iterator)
>>> print(l)           #False
>>> d=isinstance({}, Iterator)
>>> print(d)           #False
>>> s=isinstance('abc', Iterator)
>>> print(s)           #False

生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数:
>>> from collections import Iterator
>>> l=isinstance(iter([]), Iterator)
>>> print(l)             #True

>>> from collections import Iterator
>>> s= isinstance(iter('abc'), Iterator)
>>> print(s)             #True

 为什么list、dict、str等数据类型不是Iterator?
这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,
直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,
但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,
所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
Python的for循环本质上就是通过不断调用next()函数实现的![]

在了解Python的数据结构时,容器(container)、可迭代对象(iterable)、迭代器(iterator)、生成器(generator)、
列表/集合/字典推导式(list,set,dict comprehension)众多概念参杂在一起,难免让初学者一头雾水,
我将用下图将这些概念以及它们之间的关系捋清楚

pythopn 迭代器" >









本文转自lb沫51CTO博客,原文链接:http://blog.51cto.com/13562606/2060450,如需转载请自行联系原作者

相关文章
|
5月前
|
C++ 容器
迭代器 iterator
迭代器 iterator
|
6月前
|
开发者
迭代器(Iterator)遍历的两种方法(for和while)
迭代器(Iterator)遍历的两种方法(for和while)
|
6月前
|
C++ 容器
C++:迭代器
C++:迭代器
70 0
|
6月前
|
算法 C++ 容器
c++迭代器介绍
C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。
78 0
|
6月前
自己实现iterator迭代器
自己实现iterator迭代器
|
设计模式 Java Python
迭代器(Iterator)
迭代器(Iterator)是一种设计模式,用于遍历聚合对象的一种方法。迭代器提供了一种方法来访问聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式在 Java 和 Python 等编程语言中广泛使用,可以用于处理列表、元组、集合等数据结构。
56 1
|
设计模式 开发框架 .NET
C#——迭代器
C#——迭代器
83 0
C#——迭代器
|
算法 搜索推荐 C++
C++迭代器 iterator详解
C++迭代器 iterator详解
355 0
C++迭代器 iterator详解
|
索引 容器
集合之迭代器
集合之迭代器
232 0
集合之迭代器