【问题标题】:What are the advantages of using with for opening files on Python 3?在 Python 3 上使用 with 打开文件有什么好处?
【发布时间】:2011-05-05 18:24:36
【问题描述】:

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

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

而不是使用:

open(__file__,'r')

在 Python 3 中用于写入和读取文件?

【问题讨论】:

  • 您不应该对公共变量使用__name__ 样式标识符。这些名称旨在具有特殊的“魔法”含义。
  • @ulidtko 这就是这里的用法——模块自己打开了。

标签: python-3.x python


【解决方案1】:

使用with 意味着一旦您离开该块,文件将被关闭。这是有益的,因为关闭文件很容易被遗忘并占用您不再需要的资源。

【讨论】:

  • 请注意,这根本不是 Python 3 特有的。
  • @jleedev:正确,with 在 Python3 之前就存在了。
  • with 是在 Python 2.6 中引入的,但早在 Python 2.5 中就作为__future__ 功能(例如from __future__ import with_statement)提供。
  • 如果with块中出现任何异常,文件也会被关闭
  • @GeorgeWillcox 正确。使用with时,__exit__()会调用close(),因此您不必手动操作。
【解决方案2】:

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

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

欢迎阅读更多关于pep-0343的实际实现

【讨论】:

    【解决方案3】:

    要回答您关于性能优势的问题,从严格的 CPU/内存的角度来看没有。您的代码不会表现得更好,但它会更健壮,输入更少,并且应该更清晰,因此更容易维护。所以从某种意义上说,性能提升会在后期维护中以工时来衡量,这也是我们应该知道的软件真正的成本,所以它会有很大的“性能优势”。 ;)

    【讨论】:

      【解决方案4】:

      使用经典语法,您必须注意关闭文件,因此即使在文件处理期间发生异常也是如此。

      恕我直言,另一方面,使用 with 语句,您可以编写更小的代码,更易于阅读,python 会在您离开 with 块后关闭文件。

      【讨论】:

        猜你喜欢
        • 2018-04-14
        • 2011-02-13
        • 1970-01-01
        • 2014-01-15
        • 2012-10-06
        • 2012-02-05
        • 1970-01-01
        • 2011-10-31
        • 2010-09-08
        相关资源
        最近更新 更多