python 迭代器

在 Python3 中,迭代器是一种可以逐个访问集合元素的对象,它实现了迭代协议(Iterator Protocol),即该对象必须具有 __iter__()__next__() 方法。

  • __iter__() 方法返回迭代器对象本身。
  • __next__() 方法返回下一个元素。

当没有更多的元素时,__next__() 方法应引发 StopIteration 异常。

注意事项:

  1. 迭代器只能单向移动,不能往回跳。
  2. 在 for 循环中,Python 会自动处理 StopIteration 异常,因此我们不需要显式地捕获和处理该异常。

下面是一个使用 Python3 迭代器的例子,该例子定义了一个 Fibonacci 数列的迭代器:

class Fib:
    def __init__(self, max):
        self.max = max

    def __iter__(self):
        self.a = 0
        self.b = 1
        return self

    def __next__(self):
        fib = self.a
        if fib > self.max:
            raise StopIteration
        self.a, self.b = self.b, self.a + self.b
        return fib

# 使用 Fibonacci 数列迭代器打印前 10 个数
fib = Fib(100)
for i in fib:
    print(i)

上面的例子中,我们定义了一个名为 Fib 的类,并实现了迭代器协议。在 __iter__() 方法中,我们初始化了两个变量 self.aself.b,并返回了迭代器对象本身。在 __next__() 方法中,我们计算了 Fibonacci 数列中的下一个元素,如果超过了指定的最大值,则引发 StopIteration 异常。

接着,我们使用 for 循环遍历 Fibonacci 数列的前 10 个元素,并打印每个元素的值。注意,在这个例子中,我们没有显式地捕获 StopIteration 异常,因为 Python 会自动处理该异常。

ython3 中的迭代器是一种实现了迭代协议(Iterator Protocol)的对象,它可以通过 __iter__()__next__() 方法来实现逐个访问集合元素的功能。迭代器的运行原理如下:

  1. 创建迭代器对象:使用一个可迭代对象创建迭代器对象,通常可以使用 iter() 函数来实现。

  2. 初始化迭代器对象:在迭代器对象中初始化相关参数,例如记录当前迭代位置、长度等信息。

  3. 返回迭代器对象本身:在 __iter__() 方法中返回迭代器对象本身。

  4. 访问下一个元素:在 __next__() 方法中计算出下一个元素,并返回该元素的值。

  5. 引发 StopIteration 异常:当没有更多的元素时,引发 StopIteration 异常。

下面是一个简单的例子,演示了 Python3 中迭代器的运行原理:

# 创建可迭代对象
my_list = [1, 2, 3]

# 获取迭代器对象
my_iter = iter(my_list)

# 访问下一个元素
print(next(my_iter))  # 输出 1

# 访问下一个元素
print(next(my_iter))  # 输出 2

# 访问下一个元素
print(next(my_iter))  # 输出 3

# 没有更多元素,引发 StopIteration 异常
print(next(my_iter))  # 抛出 StopIteration 异常

在上面的例子中,我们首先创建了一个可迭代对象 my_list,并使用 iter() 函数获取了该对象的迭代器对象 my_iter。接着,我们使用 next() 函数依次访问了 my_iter 中的三个元素,并打印了每个元素的值。最后,由于没有更多的元素可供访问,next() 函数抛出了 StopIteration 异常。

posted @ 2023-05-04 14:00  乐瓜乐虫  阅读(39)  评论(0)    收藏  举报