要使用 with 语句,要明白上下文管理器
有了上下文管理器,with 语句才能工作。
上下文管理协议(Context Management Protocol):
包含方法 __enter__() 和 __exit__(),支持 该协议的对象要实现这两个方法。
上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了 __enter__() 和 __exit__() 方法。
上下文管理器定义执行 with 语句时要建立的运行时上下文, 负责执行 with 语句块上下文中的进入与退出操作。
通常使用 with 语句调用上下文管理器, 也可以通过直接调用其方法来使用。
运行时上下文(runtime context):由上下文管理器创建,通过上下文管理器的 __enter__() 和 __exit__() 方法实现,__enter__() 方法在语句体执行之前进入运行时上下文,__exit__() 在 语句体执行完后从运行时上下文退出。
with 语句支持运行时上下文这一概念
ex:
1 with open('a','w',encoding='utf-8') as f, 2 open('some_file','r',encoding='utf-8') as f_new: 3 f.write('Hello ') 4 f.write('World')