python “map”和“filter”是类“iterator”的子类吗?

lf3rwulv  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(145)

我在python文档中看到mapfilter返回“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的关系是什么?类mapfilterzip是否继承自类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_iteratorlist_iteratorstr_iterator类是否继承自我们不知道的抽象类iterator
最后,在哪里可以看到类maplist_iterator的实际实现?

mcdcgff0

mcdcgff01#

Iterator是“接口”。它描述了对象的功能,而不是对象的具体类型。我将这个难以搜索的页面标记为书签以供参考。
如果找到Iterator条目,您将看到迭代器是能够生成迭代器的对象(自身),并且能够使用__next__生成元素。存在许多这样的对象,从生成器表达式到mapfilter返回的对象。该页用于ABC,建议子类化,但子类化不是必需的。Python大量使用“duck typing”,它依赖于对象具有正确的能力,但不一定是某种类型。任何具有__iter____next__方法的对象都将作为迭代器工作。

相关问题