文章目录
迭代器
一、迭代器的概念
- 1)迭代器是一个带状态的对象,任何实现了
iter
和next__
方法的对象都是迭代器(python2:任何实现next()
方法的对象都是迭代器)。 - 2)其中
iter
返回迭代器本身, next 返回容器中的下一个值。 如果容器中没有更多元素了,则抛出Stopiteration异常。 因此,可以把迭代器理解成一个带有流水线的工程,我们每次询问他时,他就给我们返回下一个值。 迭代器会把所有的值都存储在内存中。next()
函数 用来返回文件的下一行/下一个值,直到促发STopIteration。 - 用处:把可迭代对象变为迭代器。 凡是可以返回一个迭代器的对象都可以称之为可迭代对象(除了上面提到的list,tuples,dict等容器外,还有很多其他对象也是可迭代对象。
二、迭代器的使用方法
1.生成迭代器
在Python中,提供了
iter()
方法,会返回一个迭代器;itertools
模块函数返回的都是迭代对象。
(1)生成无限序列
- 代码
from itertools import count
counter = count(start=9)
print(next(counter)) # 输出结果为9
print(next(counter)) # 输出结果为10
(2)从一个有限序列中生成无限序列
- 代码
from itertools import cycle
colors = cycle(['red', 'yellow', 'blue'])
print(next(colors)) #输出结果‘red'
print(next(colors)) #输出结果‘yellow'
print(next(colors)) #输出结果‘blue'
print(next(colors)) #输出结果‘red'
(3)从无限序列中生成有限序列
from itertools import cycle, islice
colors = cycle(['red', 'yellow', 'blue'])
limited = islice(colors, 0, 4)
for x in limited:
print(x)
2. 取出迭代器的数据
- 在迭代器中会定义一个叫做
__next__
方法,它提供获取数据的接口;在Python中,提供了next()内置函数,专门调用迭代器的__next__
方法,一旦没有数据后,再次访问时,会抛出StopIteration的异常。
3. 如何判断一个对象是否可以迭代
- 可以使用
isinstance()
判断一个对象是否属于Iterable类。