异步生成器不是迭代器吗?

异步生成器不是迭代器吗?,第1张

异步生成器不是迭代器吗?

因此,正如@bosnjak所说,您可以将async用于:

async for ITEM in A_ITER:    BLOCK1else: # optional    BLOCK2

但是,如果您想手动进行迭代,则只需编写以下代码:

it = async_iterator()await it.__anext__()

但是我不建议这样做。

我认为如果您要调用Iterator的原因是因为它具有完全相同的接口,所以我可以编写异步迭代器并在高度依赖next()调用的框架上使用

不,有点不一样。常规同步迭代器与异步迭代器之间有区别。并没有什么理由:

  1. Python协程内部构建在生成器之上
  2. 根据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了解更多详细信息



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存