迭代器
2017-07-14 本文已影响0人
流光汐舞
迭代是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
迭代器只能往前不会后退。
isinstance(对象,Iterable)
如果结果为True,只是表示,这些对象以使用for循环迭代遍历
isinstance(对象,Iterator)
如果结果为True,表示这个对象可以for,next
iter() :生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数
import collections
#from collections import Iterator,Iterable
ge = (x for x in range(10))
print(isinstance(ge,collections.Iterable))
print(isinstance(ge,collections.Iterator))
#for i in ge:
#print(i)
print(next(ge))
而生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。
ls = [x for x in range(10)]
print(isinstance(ls,collections.Iterable))
print(isinstance(ls,collections.Iterator))
for i in ls:
print(i)
#next(ls)
ls = [x for x in range(1000000)]
it = iter(ls)
print(next(it))
def f(num):
ls = [x for x in range(num)]
return iter(ls)
it = f(100000)
凡是可作用于 for 循环的对象都是 Iterable 类型;
凡是可作用于 next() 函数的对象都是 Iterator 类型
集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。
目的是在使用集合的时候,减少占用的内容。