登录
首页 >  文章 >  python教程

Python迭代器怎么实现?

时间:2026-04-02 09:45:13 438浏览 收藏

Python迭代器的核心在于遵循迭代协议:通过实现`__iter__()`(返回自身)和`__next__()`(按需返回值或抛出`StopIteration`)两个方法,使对象具备被`for`循环、`next()`等工具遍历的能力;既可手动编写类(如`Countdown`)精准控制迭代逻辑,也能用`yield`定义生成器函数,让Python自动封装为高效、状态保持的迭代器——理解这一协议本质,远比记忆语法更重要,它为你打开了自定义遍历行为、实现惰性计算与内存优化的大门。

python迭代器如何实现

Python 迭代器通过实现 __iter__()__next__() 两个特殊方法来实现。对象只要具备这两个方法,就能被 for 循环、next() 等迭代工具使用。

迭代器的核心协议

Python 的迭代协议规定:一个对象要是迭代器,必须同时满足:

  • __iter__() 方法,且该方法返回对象本身(即 return self);
  • __next__() 方法,每次调用返回下一个值,遍历完后抛出 StopIteration 异常。

手动实现一个简单迭代器

比如实现一个从 0 数到 n-1 的计数器迭代器:

<font size="2"><code>class Countdown:
    def __init__(self, n):
        self.n = n
        self.current = 0
<pre class="brush:python;toolbar:false;">def __iter__(self):
    return self  # 迭代器自身就是可迭代对象

def __next__(self):
    if self.current >= self.n:
        raise StopIteration
    value = self.current
    self.current += 1
    return value

使用示例

for i in Countdown(3): print(i) # 输出:0, 1, 2

生成器函数:更简洁的迭代器写法

yield 定义的函数会自动返回一个迭代器对象,无需手动写 __iter____next__

<font size="2"><code>def countdown_gen(n):
    current = 0
    while current 效果等价于上面的 Countdown 类<p>for i in countdown_gen(3):
print(i)  # 同样输出:0, 1, 2
</p></code></font>

生成器函数在首次调用时返回一个生成器对象(本质是迭代器),每次 next() 调用会执行到下一个 yield 并暂停,状态自动保存。

注意区分:可迭代对象 vs 迭代器

不是所有能用 for 遍历的对象都是迭代器:

  • 可迭代对象(如 list、str、dict)只实现了 __iter__(),返回一个迭代器;
  • 迭代器 是可迭代对象的“一次性的遍历工具”,既可被遍历,也实现了 __next__()
  • 调用 iter(obj) 可把可迭代对象转为迭代器;调用 next(it) 触发实际取值。

基本上就这些。掌握协议本质比死记语法更重要——只要守住 __iter__ 返回自己、__next__ 按需返回值+抛异常这两条,就能写出任意逻辑的迭代器。

终于介绍完啦!小伙伴们,这篇关于《Python迭代器怎么实现?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>