这段代码中“with”的含义是什么?

时间:2014-11-22 20:52:19

标签: python syntax io with-statement

我坚持的代码示例:

import sys
with open(sys.argv[1],'r') as infile:
    num = 0
    for line in infile:
        num += 1
        print num, line,

我刚刚开始使用Python并完成了最基本的基础知识,但是阅读一些课堂笔记我不太明白这一部分(粘贴在上面)。 with如何运作以及它在这做什么? as似乎与with做了一些事情,但我无法完成,而且与此相比,我在网上看到的内容没有意义。解释它在这种特殊情况下的使用方式确实会有所帮助。

此代码也在我的笔记的输入/输出部分的开头,代码如何使用输入和输出?

2 个答案:

答案 0 :(得分:1)

withcontext managers一起使用。在这种情况下,被管理的资源是必须关闭的开放infile。即使在块内引发异常,退出with块时文件也将关闭。 aswith一起使用,为上下文管理器命名。 as子句是可选的。

有关详细信息,请阅读以下资源:

sys.argv是一个列表,其中包含运行脚本时传递给脚本的命令行参数。在这种情况下,假设sys.argv[1]命名文件的路径以供阅读。传统上,sys.argv[0]是脚本名称,因此sys.argv[1]实际上是第一个参数。

答案 1 :(得分:1)

是的,withas关键字都是Python with-statement的一部分。

sys.argv[1]可能是文件的路径。使用with语句打开文件可确保在控件离开with语句的代码块时自动关闭该文件。此外,open返回的文件对象可通过名称infile访问。

换句话说,这段代码:

with open(sys.argv[1],'r') as infile:
    ...

告诉Python:

  1. sys.argv[1]

  2. 指定的路径下打开文件
  3. 将名称infile分配给此文件对象。

  4. 当我们离开以下代码块(由...表示)时自动关闭文件。

  5. 等效代码为:

    import sys
    
    infile = open(sys.argv[1],'r')
    
    num = 0
    for line in infile:
        num += 1
        print num, line,
    
    infile.close()