with 语句是读写文件的优雅写法
with open('xxx.txt','w') as f: f.writelines(['I','love','the','world'])
由于文件对象会占用操作系统资源,同时操作系统同一时间打开的文件数量有限,所以在读写的过程中要确保,无论是否出现异常,都需要最后调用close()方法,而with语句会调用close()
其中涉及到的概念: 上下文管理器
定义
上下文管理器是这样一个对象:它定义程序运行时需要建立的上下文,处理程序的进入和退出,实现了上下文管理协议,即在对象中定义了 __enter__() 和 __exit__() 方法。 __enter__():进入运行时的上下文,返回运行时上下文相关的对象,with 语句中会将这个返回值绑定到目标对象。 __exit__(exception_type, exception_value, traceback):退出运行时的上下文,定义在块执行(或终止)之后上下文管理器应该做什么。它可以处理异常、清理现场或者处理 with 块中语句执行完成之后需要处理的动作。
自定义上下文管理器
class Context(object): def do_something(self): print('do something') def __enter__(self): print('run __enter__') return self def __exit__(self, exc_type, exc_val, exc_tb): print('run __exit__') return True with Context() as ctx: ctx.do_something()