Python 迭代器
- 迭代器基础:迭代器是遍历诸如列表和元组等集合的方法,必须实现
__iter__()
和__next__()
方法。 - 迭代器使用:可以使用
next()
函数或for
循环来遍历迭代器,自动处理元素,直至迭代器用尽。 - 自定义与无限迭代器:自定义迭代器可以通过实现特定方法轻松创建;无限迭代器不断生成元素,适用于特殊情况。
迭代器是遍历集合(如列表、元组等)的方法。使用迭代器方法,我们可以循环遍历一个对象并返回其元素。
从技术上讲,Python的迭代器对象必须实现两个特殊方法,__iter__()
和__next__()
,统称为迭代器协议。
通过迭代器进行迭代
在Python中,我们可以使用next()
函数返回序列中的下一个项。
让我们看一个例子,
# 定义一个列表
my_list = [4, 7, 0]
# 从列表创建一个迭代器
iterator = iter(my_list)
# 获取迭代器的第一个元素
print(next(iterator)) # 打印 4
# 获取迭代器的第二个元素
print(next(iterator)) # 打印 7
# 获取迭代器的第三个元素
print(next(iterator)) # 打印 0
输出
4
7
0
在这里,我们首先使用iter()
方法从列表创建了一个迭代器。然后使用next()
函数按顺序检索迭代器的元素。
当我们到达末尾且没有更多数据返回时,我们将得到StopIteration
异常。
使用for循环
自动迭代的更优雅方法是使用for循环。例如,
# 定义一个列表
my_list = [4, 7, 0]
for element in my_list:
print(element)
输出
4
7
0
for循环用于迭代器的工作原理
Python中的for
循环用于迭代一系列元素,如列表、元组或字符串。
当我们在迭代器上使用for
循环时,循环将自动遍历迭代器的元素,直到它用尽。
这是一个for
循环如何与迭代器一起工作的例子,
# 创建一个整数列表
my_list = [1, 2, 3, 4, 5]
# 从列表创建一个迭代器
iterator = iter(my_list)
# 遍历迭代器的元素
for element in iterator:
# 打印每个元素
print(element)
在这个例子中,for
循环遍历迭代器对象的元素。
在每次迭代中,循环将下一个元素的值赋给变量element,然后执行缩进的 代码块。
直到迭代器用尽,此时for循环终止。
构建自定义迭代器
在Python中从头开始构建迭代器很容易。我们只需要实现__iter__()
和__next__()
方法,
-
__iter__()
返回迭代器对象本身。如果需要,可以进行一些初始化。 -
__next__()
必须返回序列中的下一个项。在到达末尾时,在后续调用中,它必须引发StopIteration
。
让我们看一个例子,它将在每次迭代中给我们下一个2的幂。幂指数从零开始,一直到用户设置的数字,
class PowTwo:
"""类来实现两个幂的迭代器"""
def __init__(self, max=0):
self.max = max
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n <= self.max:
result = 2 ** self.n
self.n += 1
return result
else:
raise StopIteration
# 创建一个对象
numbers = PowTwo(3)
# 从对象创建一个可迭代对象
i = iter(numbers)
# 使用next获取下一个迭代器元素
print(next(i)) # 打印 1
print(next(i)) # 打印 2
print(next(i)) # 打印 4
print(next(i)) # 打印 8
print(next(i)) # 引发StopIteration异常
输出
1
2
4
8
Traceback (most recent call last):
File "<string>", line 32, in <module>
File "<string>", line 18, in __next__
StopIteration
我们也可以使用for
循环迭代我们的迭代器类。
for i in PowTwo(3):
print(i)
输出
1
2
4
8
要了解更多关于面向对象编程,请访问Python OOP。
Python无限迭代器
无限迭代器是一种永不结束的迭代器,意味着它将无限期地产生元素。
这是一个如何在Python中使用itertools
模块的count()
函数创建无限迭代器的例子,
from itertools import count
# 创建一个无限迭代器,从1开始,每次递增1
infinite_iterator = count(1)
# 打印无限迭代器的前5个元素
for i in range(5):
print(next(infinite_iterator))
输出
1
2
3
4
5
在这里,我们创建了一个从1开始,每次递增1的无限迭代器。
然后我们使用for
循环和next()
方法打印了无限迭代器的前5个元素。