栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

因此,正如@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了解更多详细信息



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号