加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用带有索引或解析行的readlines()吗?

发布时间:2020-12-20 13:29:01 所属栏目:Python 来源:网络整理
导读:我正在创建一个简单的测试函数,通过从文件读取要评估的表达式和预期结果来断言我正在开发的解释器的输出是正确的,就像 python的doctest一样.这是针对方案的,因此输入文件的示例将是 4242 (+ 1 2 3)6 我第一次尝试解析这样一个文件的函数如下所示,它似乎按预
我正在创建一个简单的测试函数,通过从文件读取要评估的表达式和预期结果来断言我正在开发的解释器的输出是正确的,就像 python的doctest一样.这是针对方案的,因此输入文件的示例将是

> 42
42

> (+ 1 2 3)
6

我第一次尝试解析这样一个文件的函数如下所示,它似乎按预期工作:

def run_test(filename):
    interp = Interpreter()
    response_next = False
    num_tests = 0
    with open(filename) as f:
        for line in f:
            if response_next:
                assert response == line.rstrip('n')
                response_next = False
            elif line.startswith('> '):
                num_tests += 1
                response = interp.eval(line[2:])
                response = str(response) if response else ''
                response_next = True
    print "{:20} Ran {} tests successfully".format(os.path.basename(filename),num_tests)

我想通过删除response_next标志来略微改进它,因为我不是这些标志的粉丝,而是用next(f)读入elif块中的下一行.关于我在freenode的IRC询问的问题,我有一个小小的无关问题.我得到了我想要的帮助,但我也得到了使用f.readlines()的建议,然后在结果列表中使用索引. (我还被告知我可以在itertools中使用groupby()作为成对行,但我稍后会研究这种方法.)

现在回答这个问题,我很好奇为什么这种方法会更好,但是我的网络连接在火车上是一个不稳定的,我无法问,所以我会在这里问它.为什么用readlines()读取所有内容而不是在运行时读取每一行时更好?

我真的很纳闷,因为我的感觉正好相反,我认为一次解析一条线看起来更干净,所以一切都完成了.我通常避免在Python中使用数组中的索引,而更喜欢使用迭代器和生成器.也许不可能回答和猜测这个人在思考这个主观意见时的想法,但是如果有一些一般的建议,我会很高兴听到它.

解决方法

将所有内容读入数组会为您提供相应的随机访问:您使用数组索引向下移动数组,并且可以随时检查下一步并在必要时进行备份.

如果您可以在不进行备份的情况下执行任务,则不需要随机访问,如果没有备份,则更加清晰.在您的示例中,您的语法似乎始终是单行(?)表达式,后跟预期的响应.所以,我已经编写了一个顶级循环,每个表达式 – 值对迭代一次,根据需要读取行.如果要支持多行表达式和结果,可以编写单独的函数来读取每个表达式:一个读取完整表达式,一个读取结果(直到下一个空白行).重要的是它们应该能够消耗所需的输入,并将输入指针保持在合理的状态以进行下一次输入.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读