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__()

 

posted @ 2025-05-29 09:53  CJTARRR  阅读(16)  评论(0)    收藏  举报