Python 迭代器
Python 迭代器
迭代器是一个包含可计数数量值的**对象**。
迭代器是一个**对象**,可以对其进行迭代,这意味着您可以遍历所有值。
从技术上讲,在 Python 中,迭代器是一个实现了迭代器协议的**对象**,该协议包括 __iter__()
和 __next__()
方法。
迭代器与可迭代对象
列表、元组、字典和集合都是可迭代对象。它们是可迭代的**容器**,您可以从中获取迭代器。
所有这些对象都有一个 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(返回 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)
试试看 »