因此,正如@bosnjak所说,您可以将async用于:
async for ITEM in A_ITER: BLOCK1else: # optional BLOCK2
但是,如果您想手动进行迭代,则只需编写以下代码:
it = async_iterator()await it.__anext__()
但是我不建议这样做。
我认为如果您要调用Iterator的原因是因为它具有完全相同的接口,所以我可以编写异步迭代器并在高度依赖next()调用的框架上使用
不,有点不一样。常规同步迭代器与异步迭代器之间有区别。并没有什么理由:
- Python协程内部构建在生成器之上
- 根据python的Zen,显式比隐式更好。这样您就可以实际看到可以在何处暂停代码。
这就是为什么它是不可能使用
iter和
next异步迭代器。而且,您不能将它们与需要同步迭代器的框架一起使用。因此,如果要使代码异步,则还必须使用异步框架。这里有几个。
另外,我想谈一谈迭代器和生成器。Iterator是具有
__iter__和
__next__方法的特殊对象。而generator是包含
yield表达式的特殊函数。
每个生成器都是一个迭代器,但反之则不然 。异步迭代器和生成器可以接受相同的东西。是的,由于python 3.6,您可以编写异步生成器!
async def ticker(delay, to): for i in range(to): yield i await asyncio.sleep(delay)
您可以阅读PEP 525了解更多详细信息
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)