Python 迭代器的使用

date
Feb 24, 2020
slug
5589750742411264
status
Published
tags
Python
summary
type
Post

先了解一下可迭代对象

说到迭代器就必须先要提一下可迭代对象(iterable),可迭代对象是能够逐一返回其成员项的对象。可迭代对象包括序列类型(如list、str、tuple)和非序列类型(如dict、文件对象、定义 __iter__() 方法或实现了 Sequence 语义的 __getitem__() 方法的任意自定义类对象。)。一个可迭代对象都有一个 __iter__() 方法,也就是说有 __iter__() 方法的对象,就是可迭代对象。

迭代器

在Python中,迭代器是遵循迭代协议的对象,用来表示一连串数据流。重复调用迭代器的__next__()方法(或将其传给内置函数 next())将逐个返回数据流中的项。当没有数据可用时则将引发 StopIteration 异常。
迭代器分为两类:
  • 使用iter()从任何序列对象中得到迭代器(如list, tuple, dict, set等)。
  • 输入迭代器generator (包括生成器和带 yield 的函数)。
迭代器有两个基本方法:
  • iter() 返回一个迭代器对象
  • next() 逐一返回迭代对象中的项

迭代器的使用

使用 iter() 返回迭代器

In [1]: list = ['A', 'B', 'C'] In [2]: iters = iter(list) In [3]: print(next(iters)) A In [4]: print(next(iters)) B In [5]: print(next(iters)) C In [6]: print(next(iters)) ---------------------------------------------------------------------------StopIteration Traceback (most recent call last) <ipython-input-6-9689206231f0> in <module>----> 1 print(next(iters)) StopIteration:
list 是长度为3的列表,使用list作为参数返回的迭代器中可迭代的项目也只有3个,当超出可迭代的范围时将引发 StopIteration 异常。

使用 for 遍历迭代器

迭代器对象可以使用for语句进行遍历。
list = ['A', 'B', 'C'] iters = iter(list) for i in iters: print(i)
输出结果:
A B C

文件迭代

逐行读取文本文件的内容
for i in open("test.txt", encoding="utf-8"): print(i)

自定义迭代器

一个类通过实现 __iter__()__next__() 方法来创建一个迭代器。
迭代器必须有 __iter__() 方法用来返回该迭代器对象自身。
class MyIter: def __init__(self, m): self.data = m self.length = len(m) self.index = -1 def __iter__(self): return self def __next__(self): if self.index < self.length-1: self.index += 1 else: raise StopIteration return self.data[self.index] # def next(self): # Python2 中使用next()# if self.index < self.length-1:# self.index += 1# else:# raise StopIteration# return self.data[self.index]iters = MyIter(['A', 'B', 'C']) for i in iters: print(i) # print(next(iters))# print(next(iters))# print(next(iters))
 
对于本文内容有任何疑问, 可与我联系.