我在python文档中看到map
和filter
返回“iterator”对象,但是当我检查返回对象的类型时,我发现它的类型是<class 'filter'>
和<class 'map'>
x = [1,2,3,4]
print(type(filter(lambda i: i>2, x)))
<class 'filter'>
print(iter(x))
<class 'list_iterator'>
类map
与类iterator
的关系是什么?类map
、filter
或zip
是否继承自类iterator
?
我还看到有多种类型的迭代器依赖于源变量。例如:
x = (1,2,3,4)
print(type(iter(x)))
<class 'tuple_iterator'>
x = [1,2,3,4]
print(type(iter(x)))
<class 'list_iterator'>
x = "1234"
print(type(iter(x)))
<class 'str_iterator'>
tuple_iterator
、list_iterator
和str_iterator
类是否继承自我们不知道的抽象类iterator
?
最后,在哪里可以看到类map
和list_iterator
的实际实现?
1条答案
按热度按时间mcdcgff01#
Iterator
是“接口”。它描述了对象的功能,而不是对象的具体类型。我将这个难以搜索的页面标记为书签以供参考。如果找到
Iterator
条目,您将看到迭代器是能够生成迭代器的对象(自身),并且能够使用__next__
生成元素。存在许多这样的对象,从生成器表达式到map
和filter
返回的对象。该页用于ABC,建议子类化,但子类化不是必需的。Python大量使用“duck typing”,它依赖于对象具有正确的能力,但不一定是某种类型。任何具有__iter__
和__next__
方法的对象都将作为迭代器工作。