迭代器&Python可迭代对象,迭代器,生成器的区别

1.可迭代对象,迭代器和生成器之间的关系

可迭代对象与迭代器 刚开始我认为这两者是等同的,但后来发现并不是这样;下面直接抛出结论:

1)可迭代对象包含迭代器。

2)如果一个对象拥有__iter__方法,其是可迭代对象如果一个对象拥有next方法,其是迭代器

3)定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和next方法。

你也许会问,结论3与结论2是不是有一点矛盾?既然一个对象拥有了next方法就是迭代器,那为什么迭代器必须同时实现两方法呢?

因为结论1,迭代器也是可迭代对象,因此迭代器必须也实现__iter__方法。

可迭代对象

1.生成器

2.元组,列表,集合,字典,字符串(需要借助iter()函数转换,变成了迭代器

判断是否可迭代?

 1 from collections import Iterable
 2 
 3 # 列表
 4 list1 = [1, 3, 4, 5]
 5 f = isinstance(list1, Iterable)
 6 print(f)
 7 
 8 # 字符串
 9 f = isinstance('abc', Iterable)
10 print(f)
11 
12 # 整型
13 f = isinstance(100, Iterable)
14 print(f)
15 
16 # 生成器
17 g = (x for x in range(10))
18 f = isinstance(g, Iterable)
19 print(f)

 

 迭代器是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束

迭代器只能往前不会后退

可以被next()函数调用并不断返回下一个位置的对象称为迭代器:Iterator

 

问题:可迭代的是否就是迭代器?

list是可迭代的,但不是迭代器

生成器是可迭代的,也是迭代器

那怎么把list变成迭代器?

利用系统函数iter(),将可迭代的变成一个迭代器

list1 = iter(list1)

 

生成器与迭代器的关系

迭代器包括生成器,生成器是迭代器的一种

 

python next()函数

https://www.cnblogs.com/GumpYan/p/12340310.html

 

posted @ 2020-02-23 15:41  GumpYan  阅读(169)  评论(0编辑  收藏  举报