##每日学习day10--2022/4/14
###迭代器
#可迭代对象(可用for循环的对象): 1.list tuple dict set str等几何数据类型。2.generator生成器,或者包含yield的生成器函数
from collections.abc import Iterable # Iterable 可迭代的对象
isinstance([],Iterable) # True
#迭代器(Iterator):可以被next()函数调用并不断返回下一个值的对象。生成器一定是迭代器对象
from collections.abc import Iterator # Iterator 迭代器
print(isinstance([],Iterator)) #False,虽然是可迭代对象,但不是迭代器
print(isinstance((x for x in range(100)),Iterator)) #True
print(isinstance([x for x in range(100)],Iterator)) #显然列表生成式不是迭代器
#关于Iterator,可以代表一个无穷集合,不确定长度。而list等并不是不确定长度。
l = (x for x in range(100)) #所以生成器对象,并不是一个长度为100的数据类型
print(len(l)) # TypeError: object of type 'generator' has no len()
#小结:
#1.凡是可以for的,都是可迭代对象。Iterable
#2.凡是可以调用next()函数的,都是迭代器对象。Iterator。表示一个惰性计算的序列
#3.python的for循环本质,就是不断调用next()实现的
def ange_for(i):
it = iter(i) # iter(i) 根据i获得一个Iterator对象
while True:
try:
x = next(it)
except StopIteration:
break
Promethues