python - 用生成器迭代数据在文件和IDLE中运行结果不一致,

查看:78
本文介绍了python - 用生成器迭代数据在文件和IDLE中运行结果不一致,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

使用生成器迭代数据构造丢失问题,同样的代码运行结果不一致:

  1. 文件方式运行得到结果为:5 2 1 0

  2. Python自带IDLE运行得到结果为:5 3 2 1 0

def countdown(n):
    while n >= 0:
        newvalue = (yield n)
        if newvalue is not None:
            n = newvalue
        else:
            n -= 1


c = countdown(5)
for n in c:
    print(n)
    if n == 5:
        c.send(3)

解决方案

不要对正在遍历的对象进行修改, 那样会导致索引混乱, 无法达到我们想要的结果, 可以通过enumerate查看遍历过程中, 索引的变化

for index, n in enumerate(c):
    # index 为取到的索引值
    print(index, n)
    if n == 5:
        c.send(3)
        

这篇关于python - 用生成器迭代数据在文件和IDLE中运行结果不一致,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆