'''
迭代器:
1、可以被next()函数调用并不到返回一个值的对象称为迭代器对象(Iterator)
2、迭代器不但可以作用于for循环,还可以被next()调用
'''
from collections.abc import Iterator
print(isinstance([],Iterator))
print(isinstance({},Iterator))
print(isinstance("sunck",Iterator))
print(isinstance((x for x in range(1,5)),Iterator))
#转成Iterator对象
li = [1,2,3,4,5]
#将可迭代对象转为迭代器
li = iter(li)
print(next(li))
print(next(li))
print(next(li))
print(next(li))
print(next(li))
#为什么list、dict、str、set等数据类型不是Iterator
#Iterator对象表示的是一个数据流,Iterator对象一个被next()函数调用并返回一个数据
#直到抛出StopIteration错误,可以把数据流看成是一个有序的序列,但是不确定这个序列的长度
#只能通过next()函数不断计算下一个数据,所以说Iterator的设计是惰性求值的。
#Iterator可以表示一个无限大的数据流,而list永远不可能存储无限的数据
#杨辉三角
def func(n):
arr = [1]
index = 0
while index < n:
yield arr
arr = [arr[x] + arr[x+1] for x in range(len(arr) - 1)]
arr.insert(0,1)
arr.append(1)
index +=1
g = func(10)
for i in g:
print(i)