Python 迭代器的使用

先了解一下可迭代对象

说到迭代器就必须先要提一下可迭代对象(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))
发布了33 篇原创文章 · 获赞 62 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/Jairoguo/article/details/104483824