主题
with 语句与上下文管理器
在进行文件、网络连接或数据库等资源管理时,及时释放资源是关键。with
语句配合上下文管理器,能自动处理资源的进入与退出过程,避免遗忘释放资源所带来的问题。
什么是上下文管理器
上下文管理器是一类实现了 __enter__
和 __exit__
方法的对象,用于在代码块执行前后自动执行特定操作。
基本语法
python
with open("example.txt", "r") as f:
content = f.read()
等同于:
python
f = open("example.txt", "r")
try:
content = f.read()
finally:
f.close()
使用 with
语句无需手动调用 close()
,提高代码健壮性与可读性。
多个资源的管理
可以同时管理多个资源:
python
with open("input.txt") as fin, open("output.txt", "w") as fout:
for line in fin:
fout.write(line.upper())
自定义上下文管理器
使用类定义一个上下文管理器:
python
class MyContext:
def __enter__(self):
print("进入上下文")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("退出上下文")
with MyContext():
print("处理中")
也可以使用 contextlib
装饰器简化写法:
python
from contextlib import contextmanager
@contextmanager
def my_context():
print("进入")
yield
print("退出")
with my_context():
print("操作中")
应用场景
- 文件读写
- 数据库连接
- 网络请求连接管理
- 临时变量作用域控制
- 自动释放锁等并发控制
总结
with
语句能自动处理资源释放,避免遗漏;- 所有支持上下文管理器的对象都可与
with
配合使用; - 可通过类或装饰器自定义上下文管理器,扩展资源管理能力;
with
使代码更简洁、安全,是现代 Python 编程的推荐实践。