Python中是否有内置的迭代器?

时间:2018-08-20 09:21:32

标签: python iterator built-in

我们内置了诸如列表,元组和字典之类的迭代器,仅举几例。我们还可以通过在类中实现__iter__方法来创建自己的可迭代对象。我们还可以通过实现__iter____next__方法来实现迭代器对象,但是是否有内置迭代器,如内置迭代器?

3 个答案:

答案 0 :(得分:3)

Python 3中以下builtin return 迭代器:enumerate()filter()iter()(当然),{{1} },map()reversed()

在Python中,还存在许多返回迭代器的本地python方法,例如,检出itertools module(提示中的提示!)。

但是,为了方便地回答您的问题,没有zip() 迭代器(我认为这不是一个很好的用例),而是{{3 }}说builtins,其他都不是可迭代的,然后只是 return


测试list()中存在迭代器 classes (不存在对象)(由于tobias_k):

builtins

答案 1 :(得分:0)

文件句柄,例如,实现迭代器协议:

f = open('file.txt')
next(f)
# first line
next(f)
# second line

答案 2 :(得分:0)

此代码列出了实现 iter 的每个内置函数:

import builtins

for item in dir(builtins):
    class_ = getattr(builtins, item)
    if type(class_) is type:
        if hasattr(class_, '__iter__'):
            print(item)

打印以下可迭代的

bytearray
bytes
dict
enumerate
filter
frozenset
list
map
range
reversed
set
str
tuple
zip

迭代器是对象,而不是类。迭代器也是从对象创建的。

在标准库中有一个迭代器不是很有用,因为迭代器已用尽。当您对它们调用next()足够多次时,它们最终将不返回任何内容。

您还说过“ zip”之类的东西是“本机方法”。严格说来并非如此。 “ zip”是一个类(请参见上文),而zip()创建zip类的实例。

将术语“功能”和“方法”视为明显不同也很有帮助。如果您的函数是在模块(.py文件)中定义的,则称为函数。如果它是在类中定义的,则称为方法。

Python有点混乱,因为int和str和type之类的东西实际上是类,但是我们像内置函数一样使用它们。

在内置模块中进行探索非常有趣。只要做:

import builtins
dir(builtins)

然后检查您在其中找到的某些事物的类型,例如:

>>> type(dir)
<class 'builtin_function_or_method'>

>>> type(zip)
<class 'type'>

>>> type(int)
<class 'type'>

>>> type(chr)
<class 'builtin_function_or_method'>

>>> type(type)
<class 'type'>

看看它们到底是什么。仅通过执行此练习,您将获得有关python如何工作的更多见识。