温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python迭代器如何理解

发布时间:2026-10-15 15:07:02 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

理解 Python 的迭代器(Iterator),可以从“是什么、怎么用、为什么用、和生成器的关系”几个角度来看。


一、什么是迭代器?

迭代器是一个可以记住遍历位置的对象,它让我们能够一个一个地取出数据,而不需要一次性把所有数据放在内存里。

在 Python 中:

迭代器 = 可迭代对象 + 迭代能力

更准确地说:

  • 可迭代对象(Iterable):能用 for 循环的东西(如 list、tuple、str、dict)
  • 迭代器(Iterator):实现了 __iter__() 和 __next__() 方法的对象

二、迭代器的基本规则

一个对象要成为迭代器,必须实现两个方法:

__iter__()   # 返回迭代器自身
__next__()   # 返回下一个元素,没有元素时抛 StopIteration

示例:手写一个简单迭代器

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        value = self.data[self.index]
        self.index += 1
        return value

使用:

it = MyIterator([1, 2, 3])

print(next(it))  # 1
print(next(it))  # 2
print(next(it))  # 3
# print(next(it))  # 抛 StopIteration

三、可迭代对象 vs 迭代器

lst = [1, 2, 3]

# list 是可迭代对象,但不是迭代器
print(iter(lst))  # 得到一个迭代器

转换方式:

it = iter(lst)
next(it)  # 1

✅ 总结一句话:

iter(可迭代对象) → 迭代器


四、for 循环底层发生了什么?

for x in lst:
    print(x)

等价于:

it = iter(lst)
while True:
    try:
        x = next(it)
        print(x)
    except StopIteration:
        break

五、为什么要用迭代器?

1️⃣ 节省内存(非常重要)

迭代器按需生成数据,不一次性存全部:

# 不好:一次性生成
nums = [i for i in range(100000000)]

# 好:迭代器
nums = (i for i in range(100000000))

2️⃣ 支持无限序列

class Counter:
    def __init__(self):
        self.n = 0

    def __iter__(self):
        return self

    def __next__(self):
        self.n += 1
        return self.n

# 无限迭代

3️⃣ 统一遍历接口

所有容器都能用 for 遍历,因为都遵循迭代协议。


六、迭代器 vs 生成器(容易混淆)

生成器是迭代器的“语法糖”

def gen():
    yield 1
    yield 2

等价于手写迭代器,但简单得多。

✅ 生成器:

  • 自动实现 __iter__ 和 __next__
  • 用 yield 暂停函数

七、一句话总结

迭代器就是“一次取一个”的对象,它让 Python 能优雅地处理序列、节省内存、支持无限数据。

如果你愿意,我也可以:

  • 用生活例子(如水龙头)解释
  • 对比 Java / C++ 的迭代器
  • 结合 for / map / filter / 生成器 实战讲
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手