python - 如果一次读取整个文件需要 with 语句?

标签 python with-statement

我使用它已有 12 年了:

content=open(foo).read()

来自大学的新同事说:你应该使用with语句。

with open(foo) as fd:
    content=fd.read()

我没有看到一个很好的理由为什么我应该输入不必要的内容。

with 语句给我的唯一好处是:一旦 block 离开,fd 就会关闭。如果没有 with 语句,如果垃圾收集器开始执行其工作,则 fd 将关闭。

请告诉我:如果我一次读取整个文件,为什么要使用 with 语句?

更新:我知道 with 语句是如何工作的,我知道它很有用(例如写入文件)。

最佳答案

好吧,就您的目的而言,没有真正的理由。但是,with 的用处并不仅限于文件。它可以与线程一起使用。例如:

import threading
lock = threading.Lock()
with lock:
    # Critical section
    statements
    # End critical section

with 语句在控制进入和离开后面的语句 block 时自动获取和释放锁。

使用它已成为一种很好的做法,因为它为您的代码增加了额外的安全性,并使文件读取部分更加突出和可读(在我看来),因为当您使用 with 语句时,您本质上是在缩进 block 内。

关于python - 如果一次读取整个文件需要 with 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19634335/

相关文章:

python - 从对象列表构建数据帧花费的时间太长

python - 依赖 python 的 with...as 语句是一种好习惯吗

python - 为什么模块不能成为上下文管理器(到 'with' 语句)?

python - 在数学运算中将结果整数转换为具有五位小数的 float

Debian 8 上的 Python numba/llvmlite - 我无法构建 llvmlite

Python 'with' 命令

testing - WithClauseError, Elixir 单元测试匹配(:ok,值}

python - 检测异常是否已经在 Python 2.7 的嵌套 with 语句中处理

python - 如何断言 Pandas 数据框列中的所有值都具有所需的长度

python - 将 Dataframe 转换为包含 Pandas 数组的单元格的 Series