Context Manager指的是python在执行一段代码前后,做的一些预处理和后处理,使得代码块运行处于一个小的环境(surrounding),出了这个小环境之后,资源释放,环境中的各种配置也失效。
例如在打开文件需要
关闭,连接数据库后需要关闭连接。很多优雅第三方库也会利用上下文使得对象进入特定的某种状态。
with的基本用法如下:
with EXPR as VAR:
BLOCK
其中发生了一系列过程:
python内置的标准库contextlib可以是的代码书写更加简洁,本质是一样的。比较有用的是contextlib.contextmanager这个装饰器,被装饰的函数在yield的前面相当于__enter__,yield的后面相当于__exit__,yield本身的返回值赋给as后的变量
from contextlib import contextmanager @contextmanager def custom_open(filename: str): print("enter......") handler = open(filename) yield handler print("exit...") handler.close() with custom_open("hello.txt") as f: print(f.read())
或者
def test2(): with open("1.txt", "w") as f: f.write("2222")
原文:https://www.cnblogs.com/joy-field/p/14520005.html