__iter__()
和__next__()
是Python中可迭代对象和迭代器的两个核心函数。
可迭代对象是指实现了__iter__()
函数的对象,而迭代器是指实现了__iter__()
和__next__()
函数的对象。迭代器通过__next__()
函数实现逐个访问元素的功能。
具体来说,__iter__()
函数用于返回一个迭代器对象,而__next__()
函数则用于返回容器中的下一个元素。如果容器中已经没有元素可以迭代了,__next__()
函数应该引发StopIteration
异常。
下面是一些示例代码:
class MyList:
def __init__(self):
self.data = [1, 2, 3, 4]
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
self.index += 1
return value
# 创建可迭代对象
mylist = MyList()
# 使用for循环遍历
for item in mylist:
print(item)
在上面的示例代码中,MyList
类实现了__iter__()
和__next__()
函数,因此它是一个可迭代对象和迭代器。在使用for
循环遍历时,Python会自动调用__iter__()
函数获取迭代器对象,并使用__next__()
函数逐个读取元素。输出结果是:
1
2
3
4
需要注意的是,当一个对象既是可迭代对象,又是迭代器时,它应该返回自己本身。即__iter__()
函数应该返回self
,而不是另外一个实现了__next__()
函数的对象。