首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成器是迭代器的实例,而不是。

生成器是迭代器的实例,而不是。
EN

Stack Overflow用户
提问于 2022-03-03 11:31:54
回答 1查看 55关注 0票数 0

我有下面的代码。在第一个验证中,我得到了False,而在第二个验证中得到了True。有人能帮我理解这两种情况有何不同吗?我在Windows-10上使用Windows-10

代码语言:javascript
复制
from collections.abc import Iterator

i1 = iter([])
g1 = (lambda : (yield))()
print (isinstance(g1, type(i1)))

print(isinstance(g1, Iterator))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-03 12:07:56

如果您print(type(i1)),您将看到它不是Iterator,而是list_iterator。这是迭代器的特定实现,而Iterator是迭代器的抽象基类型。

生成器和list_iterator都是基类Iterator的子类型。

代码语言:javascript
复制
>>> from collections.abc import Iterator
>>> type1 = type(iter([]))
>>> type1
<class 'list_iterator'>
>>> issubclass(type1, Iterator)
True
>>> def gen():
...   yield 1
...
>>> type2 = type(gen())
>>> type2
<class 'generator'>
>>> issubclass(type2, Iterator)
True
>>> type1 is type2
False
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71336461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档