在讲迭代器之前,我们需要先了解一下什么是迭代和可迭代对象
1. 什么是迭代?
迭代是访问集合元素的一种方式
nums = [11, 22, 33] # 可以通过for循环将nums列表中的每个数据依次获取 for num in nums: print(num) name = "teacher" for temp in name: print(temp)
我们已经知道可以对list
、tuple
、str
等类型的数据使用for...in...
的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代
2. 什么是可迭代对象?
可以使用for.......in........去循环遍历,就是可迭代对象
下面的是可以迭代的数据类型
- 列表
- 元组
- 字典
- 字符串
而下面的则不是可以迭代的数据类型
- 整型
- 浮点型
In [53]: isinstance('abc', Iterable) Out[53]: True In [54]: isinstance(mylist, Iterable) Out[54]: False
可以使用isinstance来判断元素是否是一个可迭代的对象
什么是迭代器?
迭代器是一个可以记住遍历的位置的对象。迭代器对象从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
在一个程序中我们就可以使用iter(xx)方法来获取可迭代对象得迭代器,通过next(xx)方法获取迭代器的数据
from collections.abc import Iterator nums = [11, 22, 33, 44] nums_iter = iter(nums) print("nums", isinstance(nums, Iterator)) print("nums_iter", isinstance(nums_iter, Iterator)) num1 = next(nums_iter) print(num1) num2 = next(nums_iter) print(num2) num3 = next(nums_iter) print(num3) num4 = next(nums_iter) print(num4)
要注意的是使用nex()方法 不可以超过元素个数,如果在上述代码中再使用next()获取一次数据就会报错,因为数据只有四个已经获取完了
还有要注意的一点是:可迭代对象不一定是迭代器,但是迭代器一定是可迭代对象