1. 迭代器是什么? #

2. 可迭代对象 vs 迭代器 #

概念 说明 例子
可迭代对象 (Iterable) 能被 for 遍历,有 __iter__() list、dict、str、文件对象
迭代器 (Iterator) 有 __iter__() 和 __next__(),负责「一个个取」 iter([1,2,3])
# 列表是可迭代对象
nums = [1, 2, 3]
# iter() 获取迭代器
it = iter(nums)
# next() 逐个取出元素
print(next(it))
print(next(it))

3. 迭代器协议 #

4. iter() 与 next() #

# 可迭代对象
data = ["a", "b", "c"]
# 获取迭代器
it = iter(data)

# 逐个取出元素
print(next(it))
print(next(it))
print(next(it))
# 迭代结束后返回默认值,不抛异常
print(next(it, "没了"))

5. 项目中的典型场景 #

5.1 逐行读大文件 #

# 打开文件,文件对象是可迭代的
with open("access.log", "r", encoding="utf-8") as f:
    # 按行惰性读取,不会一次性加载全部内容
    for line in f:
        print(line)

5.2 一次遍历 vs 多次遍历 #

# 创建迭代器
it = iter([1, 2, 3])
# 第一次遍历,消耗全部元素
print(list(it))
# 第二次遍历,迭代器已耗尽,结果为空
print(list(it))

6. 项目开发要点 #