Python 迭代器
Python迭代器
迭代器是一个包含可计数值的对象。
迭代器是一个可以进行迭代的对象,这意味着您可以遍历所有值。
严格来说,在 Python 中,迭代器是实现了迭代器协议的对象,该协议包含 __iter__()
和 __next__()
方法。
迭代器 vs 可迭代对象
列表、元组、字典和集合都是可迭代对象。它们是可迭代的容器,您可以从中获取迭代器。
所有这些对象都有一个 iter()
方法,用于获取迭代器
示例
从元组返回迭代器,并打印每个值
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
自己动手试一试 »
即使是字符串也是可迭代对象,并且可以返回迭代器
示例
字符串也是可迭代对象,包含一系列字符
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
自己动手试一试 »
遍历迭代器
我们也可以使用 for
循环来遍历可迭代对象
实际上,for
循环会创建一个迭代器对象,并在每次循环时执行 next() 方法。
创建迭代器
要将对象/类创建为迭代器,您必须为您的对象实现 __iter__()
和 __next__()
方法。
正如您在 Python 类/对象章节中学到的,所有类都有一个名为 __init__()
的函数,它允许您在创建对象时进行一些初始化。
__iter__()
方法的作用类似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。
__next__()
方法也允许您执行操作,并且必须返回序列中的下一个项。
示例
创建一个返回数字的迭代器,从 1 开始,每个序列递增一(返回 1,2,3,4,5 等)
class MyNumbers
def __iter__(self)
self.a = 1
return self
def __next__(self)
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
自己动手试一试 »
StopIteration
如果您有足够的 next() 语句,或者在 for
循环中使用,上面的示例将永远继续下去。
为了防止迭代无限进行,我们可以使用 StopIteration
语句。
在 __next__()
方法中,我们可以添加一个终止条件,在迭代次数达到指定次数时引发错误
示例
迭代 20 次后停止
class MyNumbers
def __iter__(self)
self.a = 1
return self
def __next__(self)
if self.a <= 20
x = self.a
self.a += 1
return x
else
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter
print(x)
自己动手试一试 »