python中的Iterable对象和Iterator
Posted zf-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的Iterable对象和Iterator相关的知识,希望对你有一定的参考价值。
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178254193589df9c612d2449618ea460e7a672a366000?tdsourcetag=s_pcqq_aiomsg
可使用for进行迭代的数据类型分为以下两种:
(1)集合数据类型:如dict、list、tuple、set、str等;
(2)generator:包括生成器和yield 的generator function;
注意:
(1)凡是可作用于for
循环的对象都是Iterable
类型;
(2)凡是可作用于next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列;
(3)集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。
(4)第二类对象生成器都是Iterator;
(5)为什么list
、dict
、str
等数据类型不是Iterator
?
答:这是因为Python的Iterator
对象表示的是一个数据流,Iterator对象可以被next()
函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration
错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算。Iterator
甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
(6)
(这么说,for对第一类Iterable对象操作时,其实也是先将其变成Iterator,再调用next()函数)
PS:pytorch中使用torch.utils.data.DataLoader创建的对象是一个接口对象,无法使用
以上是关于python中的Iterable对象和Iterator的主要内容,如果未能解决你的问题,请参考以下文章