python迭代器
Python迭代器(Iterator)详解
在学习了生成器之后,我们来深入了解Python中的另一个重要概念——迭代器。迭代器是Python中实现迭代协议的对象,是理解生成器和循环机制的基础。
目录
- 什么是迭代器?
- 迭代器的工作原理
- 如何创建迭代器
- 迭代器与可迭代对象的区别
- 迭代器的常用方法
- 迭代器的应用场景
- 小结
什么是迭代器?
迭代器是一个实现了迭代协议的对象。迭代协议包括两个方法:
__iter__()
:返回迭代器对象本身__next__()
:返回容器的下一个元素,如果没有元素则抛出StopIteration
异常
简单来说,迭代器是一个可以记住遍历位置的对象,可以逐个访问集合中的元素。
迭代器的工作原理
当你使用for
循环遍历一个对象时,Python会自动调用该对象的__iter__()
方法获取一个迭代器,然后不断调用迭代器的__next__()
方法获取元素,直到抛出StopIteration
异常,循环结束。
如何创建迭代器
1. 使用内置可迭代对象的迭代器
Python内置的列表、元组、字符串等都是可迭代对象,可以通过iter()
函数获得它们的迭代器。
lst = [1, 2, 3]
it = iter(lst)
print(next(it)) # 输出 1
print(next(it)) # 输出 2
print(next(it)) # 输出 3
# print(next(it)) # 会抛出 StopIteration
2. 自定义迭代器类
通过实现__iter__()
和__next__()
方法,可以自定义迭代器。
class MyRange:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
val = self.current
self.current += 1
return val
for num in MyRange(1, 5):
print(num)
输出:
1
2
3
4
迭代器与可迭代对象的区别
特性 | 可迭代对象(Iterable) | 迭代器(Iterator) |
---|---|---|
定义 | 实现了__iter__() 方法的对象 |
实现了__iter__() 和__next__() 方法的对象 |
作用 | 可以返回一个迭代器 | 用于遍历元素 |
是否可复用 | 是(每次调用__iter__() 返回新的迭代器) |
否(遍历完后不能重置) |
迭代器的常用方法
iter(obj)
:返回对象的迭代器next(iterator[, default])
:返回迭代器的下一个元素,若没有元素则返回default
(如果提供)
迭代器的应用场景
- 遍历自定义数据结构
- 实现惰性计算和流式数据处理
- 与生成器结合,简化迭代逻辑
- 实现无限序列和复杂迭代规则
小结
- 迭代器是实现Python迭代协议的核心对象。
- 通过
__iter__()
和__next__()
方法实现。 - 迭代器可以记住遍历状态,逐个返回元素。
- 生成器本质上是简化版的迭代器。
- 理解迭代器有助于深入掌握Python的循环和数据处理机制。