教程 python tutorial

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 编程的推荐实践。