迭代器&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