约 1914 字
约 10 分钟
迭代器(Iterator) 是 Python 中用于遍历集合对象的工具,它提供了一种统一的访问集合元素的方式。
在 Python 中,对象只要包含 __next__
方法就被视为迭代器,该函数每次被调用时返回下一项数据,没有下一项时产生 StopIteration 异常。
通过 next
函数来获取迭代器的下一个数据项。
示例:
import io
# 迭代器类
class Iterator:
def __init__(self, stop):
self.__stop = stop
self.__current = 0
# 逐项返回数据
def __next__(self):
if self.__current < self.__stop:
self.__current += 1
return self.__current - 1
else:
raise StopIteration
# 迭代器对象
iterator = Iterator(10)
# 迭代
while (value := next(iterator, None)) is not None:
print(value)
可迭代对象(Iterable) 是拥有迭代器的对象,在 Python 中,对象只要包含 __iter__
方法就被视为可迭代对象,该函数负责返回迭代器。
通过 iter
函数来获取可迭代对象的迭代器。
示例:
# 迭代器类
class Iterator:
def __init__(self, stop):
self.__stop = stop
self.__current = 0
# 逐项返回数据
def __next__(self):
if self.__current < self.__stop:
self.__current += 1
return self.__current - 1
else:
raise StopIteration
# 可迭代对象类
class Iterable:
def __init__(self, stop):
self.__iterator = Iterator(stop)
def __iter__(self):
return self.__iterator
# 创建可迭代对象
iterable = Iterable(10)
# for 迭代
for value in iterable:
print(value)
将迭代器和可迭代对象写作两个类并不是必须的,很多时候可迭代对象的迭代器就是自己本身,__iter__
函数返回 self
。
例如:
# 既是可迭代对象又是迭代器
class Iterator:
def __init__(self, stop):
self.__stop = stop
self.__current = 0
#
def __next__(self):
if self.__current < self.__stop:
self.__current += 1
return self.__current - 1
else:
raise StopIteration
# 返回自身
def __iter__(self):
self.__current = 0 # 初始化
return self
# 创建迭代器
iterator = Iterator(10)
# for 迭代
for value in iterator:
print(value)
创建于 2025/5/23
更新于 2025/5/23