1.可迭代对象,迭代器和生成器之间的关系
可迭代对象与迭代器 刚开始我认为这两者是等同的,但后来发现并不是这样;下面直接抛出结论:
1)可迭代对象包含迭代器。
2)如果一个对象拥有__iter__方法,其是可迭代对象;如果一个对象拥有next方法,其是迭代器。
3)定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和next方法。
你也许会问,结论3与结论2是不是有一点矛盾?既然一个对象拥有了next方法就是迭代器,那为什么迭代器必须同时实现两方法呢?
因为结论1,迭代器也是可迭代对象,因此迭代器必须也实现__iter__方法。
可迭代对象:
1.生成器
2.元组,列表,集合,字典,字符串(需要借助iter()函数转换,变成了迭代器)
判断是否可迭代?
1 from collections importIterable2
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()函数