博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

可迭代对象,迭代器(生成器)区别

Posted on 2017-08-14 11:17  开飞机的贝塔  阅读(3525)  评论(0编辑  收藏  举报

python中有些概念非常容易弄混淆,比如可迭代对象和迭代器。

什么是可迭代对象呢?

最简单的定义就是:可以使用for...in...语句进行循环的对象,比如字符串、列表、元组、字典以及迭代器、生成器都是可迭代对象。

可以使用isintance()来判断:

>>> from collections import Iterable
>>> isinstance({'dede':123},Iterable)
True
>>> isinstance('hello',Iterable)
True
>>> isinstance(123,Iterable)
False
>>> isinstance([1,3],Iterable)
True

而迭代器是可以使用next()进行回调的对象,可迭代对象和迭代器的联系是:可以对迭代对象使用iter()方法来生成迭代器。

>>> a = iter([1,3,5])
>>> next(a)
1
>>> next(a)
3
>>> next(a)
5
>>> next(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

 或者根据列表生成式来创建生成器:

>>> l = ( x * x for x in range(1,11))
>>> l
<generator object <genexpr> at 0x000000A8DF038938>

 

总结:

1.迭代器一定是迭代对象,迭代对象不一定是迭代器

2.生成器一定是迭代器,迭代器不一定是生成器

3.使用for...in...来遍历迭代对象是最常用的方式