【问题标题】:What is the meaning of "with" in this code? [duplicate]这段代码中的“with”是什么意思? [复制]
【发布时间】:2014-11-22 20:52:19
【问题描述】:

我坚持的代码示例:

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 联系在一起做某事,但我无法完全理解,与此相比,我在网上看到的内容没有意义。解释如何在这种特殊情况下使用它会很有帮助。

另外这段代码在我笔记的输入/输出部分的开头,代码是如何使用输入和输出的?

【问题讨论】:

  • 很抱歉造成混淆,但我也无法理解代码整体的含义以及 sys.argv[1],这就是为什么在网上和本网站上查找“with”语句并没有解决这个问题的原因给我的一段代码。

标签: python syntax io with-statement


【解决方案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. 将名称 infile 分配给此文件对象。

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

等效的代码是:

import sys

infile = open(sys.argv[1],'r')

num = 0
for line in infile:
    num += 1
    print num, line,

infile.close()

【讨论】:

    【解决方案2】:

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

    有关更多信息,您可以阅读以下资源:

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

    【讨论】:

      猜你喜欢
      • 2012-03-14
      • 2014-01-10
      • 2018-07-07
      • 2014-01-05
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      相关资源
      最近更新 更多