Python语言---迭代器


可以被next()函数调用并不断返回下一个值的对象称为迭代器 iterator
生成器是迭代器,但迭代器不一定是生成器
把可迭代对象(比如list,dict,str)变成迭代器的方法是 iter()
python 的 iterator对象表示的是数据流,数据流可以看做是一个有序序列,
iterator只有在需要下一个数据的时候才会计算
iterator 可以表示一个无限大的数据流,比如说全体自然数。之所以可以表示,是因为
只有在需要的时候才会计算下一个自然数的值,而不会存储全部自然数
from collections import Iterable,Iterator

Iterable:可迭代

Iterator:迭代器

#可迭代对象
a = isinstance([1,2,3],Iterable)
b = isinstance('123',Iterable)
c = isinstance((1,2,3),Iterable)
d = isinstance(set([1,2,3]),Iterable)
e = isinstance({1:2,2:3},Iterable)

print(a,b,c,d,e)
#True True True True True
isinstance(a,b),是检查a对象是否是b类型的示例

以上可以见得,list str tuple set dict都是可迭代对象

a = isinstance([1,2,3],Iterator)
b = isinstance('123',Iterator)
c = isinstance((1,2,3),Iterator)
d = isinstance(set([1,2,3]),Iterator)
e = isinstance({1:2,2:3},Iterator)
print(a,b,c,d,e)
#False False False False False
说明他们只是可迭代对象,并非迭代器
a = isinstance(iter([1,2,3]),Iterator)
b = isinstance(iter('123'),Iterator)
c = isinstance(iter((1,2,3)),Iterator)
d = isinstance(iter(set([1,2,3])),Iterator)
e = isinstance(iter({1:2,2:3}),Iterator)
print(a,b,c,d,e)
#True True True True True

如上,我们可以参考一个可迭代对象,生成一个迭代器

#迭代器函数
def fib(num):
    #斐波拉契数列
    a,b = 0,1
    for i in range(num):
        yield b
        a,b = b,a+b
gen = fib(10)

a = isinstance(gen,Iterator)
print(a)
#True

可以说明迭代器函数生成的的确是迭代器



猜你喜欢

转载自blog.csdn.net/tobe_numberone/article/details/80847784