可迭代对象和迭代器

可迭代对象:可作用于for循环的都是可迭代对象,包括字符串、列表、元组、字典等,数字不可以for循环即不是可迭代对象
>>> from collections import Iterable
>>> print(isinstance("ABC",Iterable))
True
>>> print(isinstance([],Iterable))
True
>>> print(isinstance((),Iterable))
True
>>> print(isinstance({},Iterable))
True
>>> print(isinstance(12345,Iterable))
False

迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator,迭代器的计算是惰性的,只有在需要返回下一个数据时才进行计算

              生成器有next()方法,所以生成器一定是迭代器

>>> from collections import Iterator
>>> isinstance((x for x in range(5)),Iterator)
True
>>> isinstance([],Iterator)
False
>>> isinstance((),Iterator)
False
>>> isinstance({},Iterator)
False
>>> isinstance("ABc",Iterator)
False  

 

列表、字典、元组、字符串等是可迭代对象确并不是迭代器,如需变成迭代器可使用iter方法

 1 >>> isinstance(iter([]),Iterator)
 2 True
 3 >>> a = [1,2,3]
 4 >>> isinstance(a,Iterator)
 5 False
 6 >>> isinstance(iter(a),Iterator)
 7 True
 8 >>> b = iter(a)
 9 >>> b
10 <list_iterator object at 0x000002526DE70940>
11 >>> b.__next__()
12 1
13 >>> b.__next__()
14 2
15 >>> b.__next__()
16 3
17 >>> b.__next__()
18 Traceback (most recent call last):
19   File "<stdin>", line 1, in <module>
20 StopIteration

 


 

posted @ 2017-08-15 17:33  炉山假面目  阅读(121)  评论(0编辑  收藏  举报