迭代器
迭代
可迭代对象
- 在Python中,对list、tuple、str等类型的数据可以使用for…in…的循环语法,从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。
- 在Python的基本数据类型中,列表、元组、字符串、字典都是可迭代的,而整数、浮点数、布尔数都是不可迭代的。
- 判断方法:isinstance() 判断一个对象是否是 Iterable 对象。
迭代器
一个实现了__iter__方法和__next__方法的对象,就是迭代器
文件迭代器:方法__next__
- 迭代协议:有__next__方法的对象会前进到下一个结果,而在一系列结果的末尾时,会引发StopInteration。
手动迭代:内置函数iter和next
next
内置函数next会自动调用一个对象的__next__方法。给定一个可迭代对象x,调用next(x)等同于x.next
iter
- 当for循环开始时,会通过它传递给iter内置函数,以便从可迭代对象中活的一个迭代器,返回的对象含有需要的next方法。
- 通过对可迭代对象调用内置函数 iter ,可获得一个迭代器。
其他类型迭代器
字典中的迭代器:在迭代环境中,会自动一次返回一个键
range迭代器
该迭代器根据需要产生范围中的数字,而不是在内存中构建一个结果列表,如果需要一个范围列表,必须使用list(range(…))来强制一个真正的范围列表。
range对象只支持迭代,索引以及len函数。
map迭代器
和range不同,它是自己的迭代器:在遍历其结果一次后,他们就用尽了
自定义迭代器
- 有__next__()方法,返回容器的下一个元素或抛出StopIteration异常
- 有__iter__()方法,返回迭代器本身
具体用途
- for循环
- 构建和扩展集合类型
- 逐行遍历文本文件
- 元组拆包
- 列表推导、字典推导和集合推导等等