如果你一次读完整个文件需要声明吗?

gue*_*tli 4 python with-statement

我用了12年这个:

content=open(foo).read()
Run Code Online (Sandbox Code Playgroud)

来自大学的新同事说:你应该使用这个with声明.

with open(foo) as fd:
    content=fd.read()
Run Code Online (Sandbox Code Playgroud)

我没有看到为什么我应该输入超过必要的理由.

with声明给我的唯一好处:fd一旦块离开就会关闭.如果垃圾收集器开始完成其工作,如果没有该with语句,则fd关闭.

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

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

Gam*_*iac 5

那么就你的目的而言,没有真正的理由.但是,with有用性并不仅限于文件.它可以与线程一起使用.例如:

import threading
lock = threading.Lock()
with lock:
    # Critical section
    statements
    # End critical section
Run Code Online (Sandbox Code Playgroud)

with当控件进入并离开后面的语句块时,该语句自动获取并释放锁.

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