Python 自定义迭代器和异步迭代器举例
1.迭代器
class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration else: self.index += 1 return self.data[self.index - 1] for item in MyIterator([1, 2, 3, 4, 5]): print(item)
# 核心是实现 __iter__和__next__方法,在取空时抛出StopIteration错误,这个错误可以被for自动处理,手动调用__next__()取值,则需要自行处理.
2.异步迭代器
import asyncio class AsyncIterator: def __init__(self, data): self.data = data self.index = 0 def __aiter__(self): return self async def __anext__(self): if self.index < len(self.data): await asyncio.sleep(0.1) # 模拟异步操作 result = self.data[self.index] self.index += 1 return result raise StopAsyncIteration # 使用 async def main(): async for item in AsyncIterator([10, 20, 30]): print(item) asyncio.run(main())
# 配合async for使用或者手动await调用 __anext__()
浙公网安备 33010602011771号