迭代器的使用

时间:2024-06-07 13:22:03

参考:

  • 生成器
  • 迭代器
  • next函数

迭代器的使用

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

迭代器

在Python中,迭代器是遵循迭代协议的对象,用来表示一连串数据流。重复调用迭代器的__next__()方法(或将其传给内置函数 next())将逐个返回数据流中的项。当没有数据可用时则将引发 StopIteration 异常。

迭代器分为两类:

  • 使用iter()从任何序列对象中得到迭代器(如list, tuple, dict, set等)。
  • 输入迭代器generator (包括生成器和带 yield 的函数)。

迭代器有两个基本方法:

  • iter() 返回一个迭代器对象
    next() 逐一返回迭代对象中的项

迭代器的使用

使用 iter() 返回迭代器
>>> list = ['A', 'B', 'C']

>>> iters = iter(list)

>>> print(next(iters))
A

>>> print(next(iters))
B

>>> print(next(iters))
C

>>> 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)

方法二:

# 打开文件
file_path = "example.txt"
with open(file_path) as f:
    # 创建文件迭代器
    file_iterator = iter(f)

    try:
        while True:
            # 逐行读取文件内容
            line = next(file_iterator)
            print(line, end="")
    except StopIteration:
        pass
自定义迭代器

一个类通过实现 __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]

iters = MyIter(['A', 'B', 'C'])
for i in iters:
    print(i)

# print(next(iters))

# print(next(iters))

# print(next(iters))