我们内置了诸如列表,元组和字典之类的迭代器,仅举几例。我们还可以通过在类中实现__iter__
方法来创建自己的可迭代对象。我们还可以通过实现__iter__
和__next__
方法来实现迭代器对象,但是是否有内置迭代器,如内置迭代器?
答案 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如何工作的更多见识。