Python教程27:上下文管理器与with语句
Python教程27:上下文管理器与with语句 “始有终,开必合。” 我们已经多次使用with语句打开文件,今天深入学习它的原理——上下文管理器(Context Manager)。这是Python资源管理的利器,让代码更安全、更优雅。 1. 什么是上下文管理器 问题场景 资源(文件、网络连接、数据库连接、锁)需要正确管理: 1# 问题代码:可能忘记关闭 2file = open("data.txt") 3content = file.read() 4file.close() # 忘记关闭?异常时未关闭? 5 6# try-finally保证关闭 7file = open("data.txt") 8try: 9 content = file.read() 10finally: 11 file.close() # 总是执行 12 13# 但每次都这样写很繁琐... 上下文管理器(Context Manager): 自动管理资源的生命周期 确保资源的正确获取和释放 使用with语句 即使发生异常也能正确清理 1# with语句:简洁且安全 2with open("data.txt") as file: 3 content = file.read() 4# 自动关闭文件,即使有异常也会关闭 with语句的优势 自动清理:离开with块自动释放资源 异常安全:即使发生异常也会执行清理 代码简洁:不需要显式的try-finally 可读性强:明确表达资源管理意图 2. 上下文管理器协议 上下文管理器需要实现两个魔术方法: enter() 进入with块时调用,返回资源对象: 1def __enter__(self): 2 """ 3 进入上下文时调用 4 - 获取资源 5 - 返回的对象赋给as后的变量 6 """ 7 return self # 或其他资源对象 exit() 离开with块时调用,执行清理操作: ...