设计思路
- 生成器实现特定顺序生成数据:以斐波那契数列为例,在生成器函数中使用两个变量记录前两个数,不断计算并生成下一个数。
- 支持暂停和恢复:利用Python的
yield
关键字的特性,生成器在yield
处暂停,再次调用next()
或send()
方法时恢复。
- 修改内部状态:通过
send()
方法向生成器传递值,从而修改生成器内部状态。
Python代码实现
def fibonacci_generator():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 创建生成器实例
gen = fibonacci_generator()
# 获取并打印前几个斐波那契数
for _ in range(5):
print(next(gen))
# 暂停和恢复
# 这里暂停是通过等待外部操作,如用户输入,来模拟
input("按任意键恢复...")
# 继续生成斐波那契数
for _ in range(3):
print(next(gen))
# 修改内部状态
# 例如,重置斐波那契数列的起始值
def reset_generator(gen, new_a, new_b):
gen.close()
def new_fibonacci_generator():
a, b = new_a, new_b
while True:
yield a
a, b = b, a + b
return new_fibonacci_generator()
new_gen = reset_generator(gen, 10, 20)
for _ in range(3):
print(next(new_gen))