标签:迭代 Iterator 对象 生成器 next isinstance
一个对象是仓库,也就是iterable。
一个对象是仓管员,也就是iterator。
迭代器
可迭代对象(可用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
标签:迭代,Iterator,对象,生成器,next,isinstance 来源: https://www.cnblogs.com/xinxuann/p/16179207.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。