迭代器

Iterable:可迭代的

列表,字典,元组,字符串,集合这些可以循环的都是可迭代的。

还有一类是生成器(generator),生成器都是可迭代的。

下面的列子都是可迭代的。

from collections import Iterable                  
print(isinstance([],Iterable))
print(isinstance((),Iterable))
print(isinstance({},Iterable))
print(isinstance("abc",Iterable))
a = (i for i in range(10))
print(isinstance(a,Iterable))
def func(max):
    n,a,b = 0,1,2
    if n < max:
        a,b = b,a+b
        yield b
        n += 1

f = func(10)
print(isinstance(f,Iterable))

 

迭代器:Iterator

可以被next函数调用并不断返回下一个值的对象称为迭代器。我们目前学的迭代器只有生成器。

生成器都是可迭代的对象,但是字典,列表,元组,集合等虽然是可迭代的,但并不是生成器。

from collections import Iterator
print(isinstance([],Iterator))
print(isinstance({},Iterator))
print(isinstance((),Iterator))
print(isinstance("abc",Iterator))
print(isinstance(set(),Iterator))
print(isinstance((i for i in range(10)),Iterator))
def func(max):
    n,a,b = 0,1,1
    if n < max:
        a,b = b,a+b
        yield b
        n += 1

f = func(15)
print(isinstance(f,Iterator))

元组,字典,列表等虽然不是迭代器,但是我们可用iter()函数将其变为迭代器。

print(isinstance(iter([]),Iterator))   
print(isinstance(iter({}),Iterator))
print(isinstance(iter(()),Iterator))
a = [1,2,3,4,5]           #用iter()函数将列表a变为迭代器,可用next()函数
m = iter(a)
print(next(m))
print(next(m))     

  

 总结:迭代器对象表示的是一个数据流,不知道具体数量,只能用next()函数一个一个输入出来到最后到最后一个数后报错,才能知道这个迭代器有多少元素。

 列表被iter()函数转换为迭代器后,并不能用leng()来查看列表的长度(没转换前可以),只能用next()一个一个唤醒并返回值后才能知道有多少元素。 

 凡是可作用于next的对象都是一个迭代器类型,他们表示一个惰性序列。

 

 

posted @ 2018-03-23 15:57  Roc_Atlantis  阅读(100)  评论(0编辑  收藏  举报