1914

10 分钟

#Python 的迭代器和可迭代对象

#迭代器

迭代器(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)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#可迭代对象

可迭代对象(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)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

将迭代器和可迭代对象写作两个类并不是必须的,很多时候可迭代对象的迭代器就是自己本身,__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)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

创建于 2025/5/23

更新于 2025/5/23