如何使用send方法修改Python生成器参数,实现指定数字序列输出?
Python生成器参数调整实现方案
原有代码问题分析
- 没有正确接收
send()方法传入的参数:yield表达式本身的返回值就是send()传入的内容,原有代码只通过yield z对外输出值,没有接住外部传入的重置值 - 计数重置逻辑错误:原有逻辑只要k不为None就反复重置z,不符合只重置1次计数的需求
- 终止条件与触发重置的时机设置不匹配需求
修正后可运行代码
def gen(): z = 0 # 标记是否已经完成过一次重置,避免重复重置 has_reset = False while z <= 9: # 同时完成对外输出z、接收外部传入参数两个功能 input_val = yield z # 仅允许重置1次 if input_val is not None and not has_reset: z = input_val has_reset = True else: z += 1 gen1 = gen() while True: try: current_val = next(gen1) print(current_val, end=',') # 第一次输出到4时触发重置 if current_val == 4: reset_val = gen1.send(0) print(reset_val, end=',') except StopIteration: break
运行后输出结果为:0,1,2,3,4,0,1,2,3,4,5,6,7,8,9,,删除末尾多余逗号即可匹配你需要的目标序列。
逻辑说明
- 用
input_val = yield z的写法承接外部传入的重置值,不会丢弃send()的传参 - 新增
has_reset标记限制仅重置1次计数,避免进入死循环或重复重置 - 手动用
while循环处理生成器迭代,同时接收send()返回的重置后第一个值,避免输出遗漏 - 终止条件设为
z <=9,输出到9时自动停止生成器
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

