python - 具有块自闭功能的python是否已打开资源?
问题描述
我是一个经验丰富的 Java 开发人员,我想知道 python 中的 with 块是否与嵌入的 Java 相同try/catch
。在以下示例中,我正在使用 python 和 Java 写入随机文件
import io
with io.open("filename", "w") as file:
file.write("a test")
#is file.close() necessary here ?
#file.close()
File file = new File("test.txt");
try(FileWriter writer = new FileWriter(file)) {
writer.write("a test");
// here writer.close() is useless as it is auto closed by the try catch block
} catch(IOException e){
e.printStackTrace();
}
这两个块的行为完全相同,还是 python 块在程序结束之前不关闭资源?
解决方案
是的,在这种特殊情况下,with
它的行为类似于 Java 的 try-with-resource 构造。with
退出块时关闭文件。
该with
块的目的更普遍。有关使用上下文管理器的说明,请参见此处。块的确切行为with
取决于赋予块的对象的方法__enter__
,更常见的是方法。在这种情况下,返回一个对象(或类似的类;它可以变化),并定义一个在调用时关闭自身的方法。__exit__
with
open
TextIOWrapper
TextIOWrapper
__exit__
推荐阅读
- amazon-web-services - S3 putObject 事件 - 收到旧版本
- javascript - 为什么我不能将函数输入作为变量来调用函数?
- c++ - 在哈希图中实现分配运算符重载
- matlab - matlab中用AR项估计线性回归的快速方法
- sql - 无论如何要在 SELECT 语句中使用 IN 运算符?如果不是,为什么?
- sql - 与 MS SQL 相比,PostgreSQL 在 Where 和 Group 上的速度非常慢
- java - 使用 Java 流创建具有动态值的员工列表
- tabulator - 使用会计原则格式化负数的制表器
- javascript - 如何将 Props() 值传递给 setState() 以使用 ReactJs 使模态表单可编辑
- javascript - JS 中的烧瓶变量