说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Python 中,迭代器对象通过 __next__()
方法来实现迭代器协议。迭代器协议定义了一种标准的迭代器接口,其中最重要的方法就是 __next__()
。
iterator.__next__()
iterator 中返回下一项。 如果已经没有可返回的项,则会引发 StopIteration 异常。 此方法对应于 Python/C API 中 Python 对象类型结构体的 tp_iternext 槽位。
Python 定义了几种迭代器对象以支持对一般和特定序列类型、字典和其他更特别的形式进行迭代。 除了迭代器协议的实现,特定类型的其他性质对迭代操作来说都不重要。
一旦迭代器的 __next__()
方法引发了 StopIteration,它必须一直对后续调用引发同样的异常。 不遵循此行为特性的实现将无法正常使用。
当你使用 next() 函数或者在 for 循环中迭代一个可迭代对象时,Python 会自动调用对象的 __iter__()
方法来获取一个迭代器,然后通过调用迭代器的 __next__()
方法来获取下一个元素。当迭代器耗尽(即没有更多元素可提供)时,它应该引发 StopIteration 异常,以通知调用者迭代结束。
以下是一个简单的示例说明如何使用迭代器的 __next__()
方法:
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
value = self.data[self.index]
self.index += 1
return value
else:
raise StopIteration
# 使用示例
my_iterator = MyIterator([1, 2, 3, 4, 5])
# 手动调用 __next__() 方法
print(my_iterator.__next__()) # 输出 1
print(my_iterator.__next__()) # 输出 2
# 使用 next() 函数
print(next(my_iterator)) # 输出 3
print(next(my_iterator)) # 输出 4
# 在 for 循环中迭代
for item in my_iterator:
print(item) # 输出 5
在上面的示例中,MyIterator 类实现了迭代器协议,其中 __next__()
方法负责生成序列中的下一个元素,并在序列耗尽时引发 StopIteration 异常。
https://docs.python.org/zh-cn/3/library/stdtypes.html#iterator.__next__
更新时间:March 4, 2024, 9:33 p.m. 标签:python 特殊方法 迭代器