在Python 3中,使用with打开文件有哪些优势?

10

使用它的真正性能优势是什么?

with open(__file__, 'r') as f:

使用以下方式替代:

open(__file__,'r')

Python 3中如何同时进行文件的读写?


3
常规变量不应使用 __name__ 风格的标识符。这些名称旨在具有特殊的 "魔法 "含义。 - ulidtko
1
@ulidtko 这就是它在这里的使用方式 - 模块正在打开自己。 - Josh Lee
阅读此链接:http://effbot.org/zone/python-with-statement.htm - fardjad
4个回答

12

使用 with 的意思是当你离开该块时文件会被关闭。这样做有益处,因为关闭文件是容易被忘记的,同时也会占用不必要的资源。


3
请注意,这并不仅适用于 Python 3。 - Josh Lee
@jleedev:没错,在Python3之前就有with了。 - unholysampler
with 在 Python 2.6 中被引入,但在 Python 2.5 中作为 __future__ 特性已经可用(例如 from __future__ import with_statement)。 - jathanism
如果在with块中发生任何异常,文件也将被关闭。 - Ethan Furman
这是否意味着使用with时不需要关闭文件? - George Willcox
1
@GeorgeWillcox 正确。使用 with 时,__exit__() 调用 close(),因此您无需手动执行它。 - unholysampler

9

with语句的基本作用是利用对象中的两个新魔术关键字:__enter____exit__,实现自动清理(类似c++析构函数、.net IDisposable等)。因此,实际上会发生以下情况:

file = open(__file__, 'r')
try:
  # your code here
finally: file.close()

欢迎详细阅读PEP-0343,了解实际实现的更多细节。


2
回答你的问题,从严格的CPU/内存角度来看,没有性能优势。你的代码不会表现得更好,但是用更少的打字可以使它更加健壮,并且应该更清晰,因此更易于维护。因此,在某种意义上,性能提升将在以后的维护中以人工时计算,正如我们都应该知道的那样,这才是软件的真正成本,所以它将有很大的“性能优势”。 ;)

1

使用传统语法时,您必须注意关闭文件,即使在文件处理过程中发生异常。

在我看来,另一方面,使用with语句,您可以编写更小、更易于阅读的代码,Python会在您离开with块后自动关闭文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接