python 迭代器

之前学过的list,tuple,dice,set,str,generator(包括生成器和带yield的generator函数)等都是可被for循环迭代的对象,都统称为可迭代对象:Iterable

可使用isinstance()判断一个对象是否为Iterable对象

如:

from collections import Iterable
isinstance([],iterable)   ==>True
isinstance(‘abc‘,iterable)  ==>True

等其他的实例,如字典,集合等

数字是不是可迭代对象

isinstance(100,iterable)
==结果===False====

可以被next()函数调用并不断返回下一个值的对象称之为迭代器:Iterator

from collections import iterator
isinstance((x for x in range(10)),Iterator)  ==>True
isinstance([],Iterator)     ==>False

生成器一定是迭代器,迭代器不一定是生成器。。

迭代对象(Iterable)对象转换成迭代器(Iterator)可使用iter()函数

isinstance(iter(‘abc‘),Iterator) ==>True
isinstance(iter([],Iterator)  ==> True

a = [1,2,3]

iter(a)

print(a)

===结果===<gen......

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

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

小结:

凡是可使用于ofr的对象都是Iterable类型

凡是可用于next()函数的对象都是Iterator类型

集合数据类型如list、dict、str等都是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象

Python的for循环本质上就是通过不断调用next()函数实现的,如:

for x in range(5)

pass

实际上完全等价于

it = tier([0,1,2,3,4])

while True:

try:

x = next(i)

except stopIteration:

break

时间: 2024-12-19 18:07:08

python 迭代器的相关文章

python迭代器、生成器和yield语句

http://blog.csdn.net/pipisorry/article/details/22107553 一.迭代器(iterator) 迭代器:是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration.任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开. 迭代器对象要求支持迭代

Python迭代器和生成器介绍

Python迭代器和生成器介绍 迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration. 在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作. 常用的几个内建数据结构tuple.list.set.dict都支持迭代器,字符串也可以使用迭代操作. 你也可以自己实现一个迭代器,如上所述,只

Lesson 023 —— python 迭代器与生成器

Lesson 023 -- python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 next(). 字符串,列表或元组对象都可用于创建迭代器: >>>list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>

利用Python迭代器查找最小值和最大值

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration) #利用Python迭代器查找最小值和最大值def findMaxandMin(l): if l==[]: return (none,none) else: min=l[0] max=l[0] for i in l: if max<i: max=i if min>i: min=i return(max,min) print(findMaxandMin([2,4,1,

python 迭代器 一个奇怪的解决方法

一般我们在类里面写迭代器都是如下写法: 1 class IterableSomthing: 2 def __iter__(self): 3 return self 4 5 def __next__(self): 6 return 1 但是,<流畅的python>给出了不同的见解.该书指出,在数据结构内实现迭代器是个很蠢的想法,因为需要引入游标指针记录位置的缘故,这么实现迭代器会造成数据结构空间性能下降,同时,因为游标指针的独立性使得改数据结构无法并发遍历,所以又造成了时间性能的下降.代码如下

python 迭代器和生成器

迭代器 Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止.这样在 for 循环中就可以对它进行循环处理了.那么它与一般的序列类型(list, tuple等)有什么区别呢?它一次只返回一个数据项,占用更少的内存.但它需要记住当前的状态,以便返回下一数据项.它是一个有着next()方法的对象.而序列类型则保存了所有的数据项,它们的访问是通过索引进行的. 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末

python迭代器

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

Python迭代器与生成器

生成器 仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得. 创建一个生成器函数 >>> def scq(): ...    print("11") # 当函数代码块中遇到yield关键字的时候,这个函数就是一个生成器函数 ...    yield 1 ...    print("22") ...    yield 2 ...    print("33") ...    yield 3 ... 把生成器赋值给

python 迭代器 生成器 装饰器

迭代器 可以直接作用于for循环的对象统称为可迭代对象(Iterable). 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator). 所有的Iterable均可以通过内置函数iter()来转变为Iterator. names = iter(['sun', 'ibm', 'sunny']) print(names) print(names.__next__()) print(names.__next__()) print(names.__next__()) print(