无限迭代器
Coddy Python 迭代器 课程的第 6 课,共 13 课。
无限迭代器是 Python 中一种特殊类型的迭代器,可以生成可能无限延续的值序列。有限迭代器最终会引发 StopIteration 异常,而无限迭代器会持续生成值,不会停止。
无限迭代器的特点
- 它们永远不会引发
StopIteration异常。 - 它们可用于生成连续序列,或模拟无限的数据流。
- 使用它们时,必须注意避免无限循环。
创建无限迭代器
下面是一个简单的无限迭代器示例,它会生成无限延续的整数序列:
class InfiniteCounter:
def __init__(self, start=0):
self.count = start
def __iter__(self):
return self
def __next__(self):
current = self.count
self.count += 1
return current
# 用法
counter = InfiniteCounter()
for i in counter:
print(i)
if i >= 5:
break # 防止无限循环
在这个示例中,InfiniteCounter 类会不断生成数字。我们使用 break 语句,在满足特定条件后停止迭代。
内置无限迭代器
Python 的 itertools 模块提供了几个实用的无限迭代器:
itertools.count(start, step):从起始值开始无限递增计数itertools.cycle(iterable):无限循环遍历一个可迭代对象itertools.repeat(elem, [n]):无限重复一个元素,或重复 n 次
使用 itertools.count() 的示例:
from itertools import count
for i in count(10):
print(i)
if i >= 15:
break
# 输出:10, 11, 12, 13, 14, 15
注意事项和最佳实践
- 涉及无限迭代器的循环中,始终要确保有办法跳出循环,以免程序卡住。
- 谨慎使用无限迭代器,只在必要时使用。
- 考虑使用生成器函数,以创建更节省内存的无限序列。
无限迭代器为需要持续生成或处理数据的场景提供了强大的工具,但使用时应当谨慎,以确保程序按预期运行。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个名为 CyclicCounter 的无限迭代器类,让它无限循环遍历给定范围内的数字。迭代器应从指定数字开始,到达范围末尾后再循环回到该数字。
已提供以下输入:
- 两个整数:
start和end(包含这两个数)
你的 CyclicCounter 类应:
- 实现
__iter__()和__next__()方法 - 生成从
start到end的数字(包含这两个数) - 到达
end后,循环回到start并无限继续
实现 CyclicCounter 类后,使用输入值创建它的一个实例。然后,使用循环打印迭代器生成的前 10 个数字,每个数字单独占一行。
输入将是两个以空格分隔的整数,分别表示 start 和 end。
亲手试试
# 读取输入
start, end = map(int, input().split())
class CyclicCounter:
def __init__(self, start, end):
self.start = start
self.end = end
self.current = start
def __iter__(self):
return self
# TODO: 实现 __next__() 方法
# 创建一个 CyclicCounter 实例
counter = CyclicCounter(start, end)
# TODO: 用循环打印迭代器生成的前 10 个数字
# 记得每个数字都要另起一行打印Python 迭代器中的所有课
自己练习: Python 在线编译器