带有'with'语句的代码有什么作用?

时间:2016-05-22 09:23:25

标签: python python-2.7 python-3.x with-statement

如果有很多例子都是非自我解释且文档没有太大帮助,那么我可以在代码中使用 with 语句来实现这一点:

def r_f(fn, n, vl):
    cn, rd = 0, 0
    with open(fn, 'r') as f:
        for value in f.readlines():
            rd += 1
            if rd > n:
                break
            if int(value) == vl:
                cn += 1

    return cn  

在互联网上花了一个小时之后,我发现了一些让我有一个可以理解的解释,即with语句意味着使用多个语句,但那又意味着什么,我不太确定。花了好几个小时之后,我发现open(fn, 'r')代码的目的是读取文件名为(with other operations of 'w', etc.)的文件,但以下几行f.readlines()很难找到。因此,我不知道上面的代码是做什么的。因此,我的问题被列为:

  1. 代码究竟做了什么?

    with语句究竟是什么以及如何使用multiple语句 声明?

    代码中的内容是什么?

    f.readline()在代码中实现了什么?

    为什么要比较:

  2. 如果int(value)== vl:     cn + = 1

    甚至做过?

2 个答案:

答案 0 :(得分:2)

我评论说要尝试解释;

{{1}}
  

代码究竟做了什么?

它计算一些数字出现在文件中的次数,但很难说,因为它的确切行为取决于运行时提供的参数!

编辑:作为后续行动,我建议阅读评论中张贴的@PascalvKooten链接,非常明确地解释{{1}}陈述是什么

答案 1 :(得分:1)

在开始阅读他人撰写的源代码之前,您必须阅读文档。

检查this official documentation with语句。

您复制的功能有以下几点: 它有三个参数。然后它将cnrd变量设置为0. with open(fn, 'r') as f表示在阅读模式下打开名为fn的文件,并从现在开始称之为f。然后你有for循环读取当前打开文件的每一行f并为每一行做一些事情。首先它增加rd,如果rd大于n循环中断,否则如果值(通过int()函数转换为value到整数)等于vl,然后它递增cn并返回它。