python 带有语句缩进

python with statement indentation

我经常不得不打开文件来阅读文本并对文本进行一些分析,如下例所示。

with open('foo/bar.txt') as f:
    text = f.read()
    good_stuff = analyze(text)

我的问题是,good_stuff 行是否需要缩进?据我所知, with 块的存在是为了自动建立和拆除某些进程。如果这就是它所做的一切,那么一旦我有了 text 变量,我就很好了,不再需要在 with 块中,对吗?

如果我有很多周围的代码,这可能会导致大的缩进,这可能会很烦人。我试过不缩进,它似乎有效,但我从未见过有人写

with open('foo/bar.txt') as f:
    text = f.read()
good_stuff = analyze(text)

所以我很好奇这样做是否有某种原因或标准,或者我可能没有注意到这会导致一些副作用。

第二种方法实际上更好。您应该在完成文件后立即退出 with 块。阅读后无需打开文件。

如果您想 analyze(text) 打开文件,则将其缩进,否则稍后会更好。

在这种方法中:

with open('foo/bar.txt') as f:
    text = f.read()

good_stuff = analyze(text)

您打开文件,将全部内容读入一个名为 text 的变量,您关闭了文件,然后分析了文本。

这没问题,但是如果你得到一个非常大的文件怎么办?在那种情况下,我认为你不能采用这种方法

with open('foo/bar.txt') as f:
    for line in f:
      good_stuff = analyze(line)

如果你有一个大文件,这就是我建议的阅读方式。

with 函数用于对打开的文件应用exit 方法,以便安全地关闭文件。但是,一旦您将文件内容读取到变量 "text" 中,就没有规则可以将其缩进到 "with" 块下。

是的,不需要将 good_stuff 放在缩进块中,因为在您执行 text 之后,它现在在您的程序中就像普通的 object/variable 一样具有作用域。