【问题标题】:What is the Python equivalent of close() in Java?Java 中 close() 的 Python 等价物是什么?
【发布时间】:2016-08-03 13:37:09
【问题描述】:

在 Java 中,使用 close() 方法通过删除超出范围的对象来释放资源。我对 Python 的等价物是什么感到困惑?

  • Python 的垃圾收集器会自动执行此操作吗?
  • del方法吗?
  • 我应该使用with 语句吗?

任何帮助将不胜感激。

编辑:我的目标是在需要时显式删除类对象,而不是文件对象。

【问题讨论】:

  • @AgataB 不是
  • 您是否有需要这样做的特定用例?你能详细说明一下吗? Python 的使用通常不会涉及手动清零实例(您称之为类对象)。 weakref 可能有助于避免他们留下来。 withnot 一个合适的构造,因为它一个实例的上下文中运行 - 它旨在释放 resources 持有以一个实例。我从未见过任何认真编写的 Python 代码直接使用 gc - 并不是说​​它永远不应该这样做,但这是一个很好的理由。

标签: java python python-2.7 python-3.x resources


【解决方案1】:

我应该使用 with 语句吗?

是的,根据the documentation

在处理文件对象时最好使用 with 关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。它也比编写等效的 try-finally 块要短得多:

【讨论】:

    【解决方案2】:

    您将找到答案here:将 gc.collect() 放在您的代码之前。

    【讨论】:

    • 这是否也会删除未使用的类对象?
    • 为此,可能会感兴趣以下讨论:stackoverflow.com/questions/693070/….
    • 看来您需要使用其他工具(pyflakes 和 vulture)。
    • 这实际上不是我想要的,我应该更好地表达我的问题。我需要做的是,明确地使用语句“关闭”我不再使用的对象。
    • 是的,我正在寻找类似的功能,但是对于类对象,不要关闭文件。
    【解决方案3】:

    ICart 的评论适用于许多不同的情况。但是,关于一般对象的创建和处置,我认为this other thread 很好地解释了 python 如何处理它们的对象(引用计数),以及垃圾收集的来源。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2016-12-06
      • 1970-01-01
      • 2011-01-04
      • 2011-04-12
      • 2016-10-30
      • 2011-01-04
      • 2017-08-31
      • 2013-10-18
      相关资源
      最近更新 更多