示例自定义范围类不像内置的 range 函数那样可以重置或“重复使用”。要实现与内置 range 函数相同的行为,我们可以让自定义范围类成为一个生成器函数,并在每次调用时重新开始计算。以下是修改后的代码:
def exampleCustomRange(stopExclusive):
def inner():
for i in range(stopExclusive):
yield i
return inner
>>> customRange = exampleCustomRange(3)
>>> [x for x in customRange()]
[0, 1, 2]
>>> [x for x in customRange()]
[0, 1, 2] # 现在这会在第二次尝试时重复,因为它现在是可重用或重置的。
现在,exampleCustomRange
返回一个内部函数 inner
,该函数是一个生成器,每次调用 customRange()
时都会从头开始生成新的序列,从而实现了与内置 range
函数类似的行为。