说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 内置函数 iter() 用来生成迭代器,它可以将字符串、列表、元组等序列转换为可迭代器,供 for 循环、next() 等进行迭代操作。关于迭代器可以参考教程:Python 迭代器类型。
将列表转为迭代器进行迭代:
my_list = [1, 2, 3]
it1 = iter(my_list)
next(it1) # 1
next(it1) # 2
next(it1) # 3
next(it1) # StopIteration:
可以将 range() 对象转为迭代器:
it2 = iter(range(3))
next(it2) # 0
next(it2) # 1
next(it2) # 2
next(it2) # StopIteration
它的语法有两种:
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
从对象中获取迭代器。在第一种形式中,参数必须提供自己的迭代器,或者是一个序列。
在第二种形式中,将调用 callable,直到它返回 sentinel。
如果只传入一个参数就按第一种解释,如果传入两个就按第二种方法解释。
参数分别是:
__getitem__()
方法,整数参数从0开始),否则引发 TypeError。__next__()
方法,不带任何参数,如果返回的值等于 sentinel,则将引发 StopIteration,否则将返回该值。见示例中关于读取文件有用法。返回一个迭代器对象。
关于迭代操作以及可迭代对象(iterable)可以参考教程:Python 的迭代。
对于一个对象,要支持 iter() 函数,需要在内部实现 __iter__()
特殊方法。
可参见迭代器类型有教程:Python 迭代器类型。
适合 iter() 的第二种形式的应用之一是构建块读取器。 例如,从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾:
from functools import partial
with open('mydata.db', 'rb') as f:
for block in iter(partial(f.read, 64), b''):
process_block(block)
由于 callable 不能带任何参数,先用偏函数处理。以上代码当数据读取为空时引发 StopIteration(在 for 是停止)。
更新时间:May 18, 2022, 10:37 a.m. 标签:python next 迭代