Python迭代器:解密数据遍历的核心机制
一、从现实场景理解迭代器
想象你在图书馆查阅一套百科全书:
- 传统方式:把全部100本书一次性搬到面前
- 迭代器方式:图书管理员每次递给你一本,看完再换下一本
迭代器(Iterator)正是这种"按需获取"的智慧在编程中的体现。它是Python实现高效数据遍历的核心机制,也是理解生成器、协程等高级特性的基础。
1.1 迭代器的核心价值
- 内存效率:不需要预加载全部数据
- 统一接口:不同数据结构的通用遍历方式
- 惰性计算:需要时才生成/获取数据
- 无限序列:可表示永无止境的数据流
1.2 直观对比:列表 vs 迭代器
# 传统列表方式
books = ["Vol.1", "Vol.2", ..., "Vol.1000"] # 立即占用大量内存
for book in books:
read(book)
# 迭代器方式
class LibraryIterator:
def __init__(self, total):
self.current = 1
self.total = total
def __next__(self):
if self.current > self.total:
raise StopIteration
book = f"Vol.{
self.current}"
self.current += 1
return book
library_iter = LibraryIterator(1000) # 不实际存储所有数据
for book in library_iter:
read(book)
二、迭代器协议深度解析
2.1 迭代器双协议
一个合法的迭代器必须实现两个特殊方法:
class MyIterator:
def __iter__(self):
return self # 返回迭代器本身
def __next__(self):
# 返回下一个元素或抛出StopIteration
...
2.2 迭代过程全解析
以文件读取为例演示迭代流程:
class FileLineIterator:
def __init__(self, filename):
self.file = open(filename)
def __iter__(self):
return self
def __next__(self):
line = self.file.readline()
if not line:
self.file.close()
raise StopIteration
return line.strip()
def __del__(self):
self.file.close()
# 使用示例
for line in FileLineIterator("data.txt"):
print(line)
执行流程分解:
for
循环调用iter()
获取迭代器对象- 重复调用
next()
获取元素 - 捕获
StopIteration
终止循环 - 自动处理资源清理
2.3 迭代器 vs 可迭代对象
常见混淆点澄清:
nums = [1, 2, 3] # 可迭代对象(非迭代器)
nums_iter = iter(nums) # 创建迭代器
print(type(nums)) # <class 'list'>
print(type