关于python:这段代码中”with”的含义是什么?

What is the meaning of “with” in this code?

本问题已经有最佳答案,请猛点这里访问。

代码示例:

1
2
3
4
5
6
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有关,但我不太明白,与此相比,我在网上看到的没有意义。解释一下它在这种特殊情况下是如何使用的。

这个代码也在我的注释的输入/输出部分的开头,代码是如何使用输入和输出的?


是的,withas关键字都是python的一部分的声明。

sys.argv[1]是presumably a path to a文件。一个开放的一个文件,它是ensures语句时自动闭环控制的叶子和语句的代码块。此外,文件将返回的对象openinfile通过名称访问。

换句话说,这个代码:

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

Python的:

  • 打开文件在sys.argv[1]通过给定的路径。

  • 在本文件infile指定名称的对象。

  • 当我们离开自动关闭文件下面的代码块(由...代表)。

  • 等效的代码是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sys

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

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

    infile.close()

    with是与上下文经理。本案例中的资源管理是开放的,这是infile必须是封闭的。文件将被封闭在一with块即使在异常exited扔在一块。as是一个with给a的名称上下文经理。在as子句是可选的。

    更多信息,你可以阅读以下资源:

    • http:/ / / / / datamodel.html docs.python.org 3.4参考#上下文经理
    • http:/ / / /图书馆/ stdtypes.html docs.python.org 3.4 # typecontextmanager

    sys.argv是一个列表包含命令行参数传递到脚本时,运行它。本案例中的假设是sys.argv[1]名称a path to a文件阅读。传统上,sys.argv[0]是脚本的名称,sys.argv[1]实际上是第一个参数。