一.with obj as f: #代码块... 二.执行流程: 1.with obj --->触发obj.__enter__(),需要在obj里写__enter__(self),在它里边写返回值,返回给 as f 2.with obj as f 等同于 f = obj.__enter__() 3.执行with代码块里的程序 4.执行正常时,顺序执行obj中的__exit__()方法,exc_type, exc_val, exc_tb的值都是None. 存在异常时,__exit__()方法中 a…
有次面试被问到如何优雅地打开一个文件? 那就是用with语句,调用过后可以自动关闭. 但是为什么使用with语句就可以自动关闭呢,原因就是上下文管理协议. 上下文管理协议:包含方法 __enter__() 和 __exit__(),支持该协议的对象要实现这两个方法. with open('a.txt', 'r') as a, open('b.txt', 'w') as b: b.write(a.read()) 读取文件with语句的实现及其调用过程: class ReadFil…