掌握Python上下文管理器:优雅资源管理的艺术

简介: 掌握Python上下文管理器:优雅资源管理的艺术

掌握Python上下文管理器:优雅资源管理的艺术

在Python编程中,资源管理是一个绕不开的话题——打开的文件要关闭,获取的锁要释放,数据库连接要断开。传统做法是try/finally,但Python的上下文管理器提供了更优雅的方案:with语句。

基础用法:文件操作

with open('data.txt', 'r') as f:
    content = f.read()

无需显式调用close(),退出with块后文件自动关闭,即使发生异常也依然安全。这就是上下文管理器的威力。

自定义上下文管理器

两种方式实现:

1. 类方式:实现__enter____exit__方法

class ManagedFile:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

2. contextlib装饰器:更简洁

from contextlib import contextmanager

@contextmanager
def managed_file(filename, mode):
    f = open(filename, mode)
    try:
        yield f
    finally:
        f.close()

yield前面的代码相当于__enter__,后面的相当于__exit__

实际应用场景

  • 数据库事务:自动回滚或提交
  • 线程锁:with lock: 自动释放
  • 临时环境:修改环境变量后自动恢复
  • 性能计时:统计代码块执行时间

例如,用上下文管理器实现代码计时:

@contextmanager
def timer(name):
    start = time.time()
    yield
    print(f'{name} took {time.time() - start:.2f}s')

总结

上下文管理器让资源管理变得声明式、防错且可复用。当你反复写try/finally时,不妨考虑将它封装成上下文管理器——你的代码会更Pythonic。

(全文498字)

目录
相关文章
|
4月前
|
人工智能 JavaScript Linux
【最新版养 AI龙虾🦞指南】零基础 OpenClaw 阿里云/本地部署、配置、使用保姆级教程
OpenClaw(原Clawdbot,曾用名Moltbot)作为一款开源轻量级AI自动化代理工具,2026年版本在部署灵活性、功能兼容性上实现重大升级,核心优势在于“自然语言驱动+全流程任务自动化”,无需手动编写脚本,仅需输入口语化指令,即可完成文档处理、日程管理、文件读写、跨工具协同、代码生成等各类重复性工作,被广泛应用于个人办公、新手开发、轻量团队协作等场景,堪称“私人AI员工”。
1624 92
|
5月前
|
存储 Python 容器
简化Python类:使用数据类(dataclasses)
简化Python类:使用数据类(dataclasses)
459 18
|
5月前
|
SQL 存储 关系型数据库
SQLAlchemy 技术入门指南
SQLAlchemy 是 Python 最流行的 ORM 工具包,提供 Core(SQL 表达式语言)和 ORM(对象关系映射)双模式。它 bridging Python 与 SQL,支持多数据库、连接池、事务及关系映射,兼具灵活性与企业级能力,学习曲线平缓,适合从入门到高阶应用。(239字)
479 10
|
Java API Android开发
Android TV 开发之 TV视频播放器(上)
Android TV 开发之 TV视频播放器(上)
1431 0
Android TV 开发之 TV视频播放器(上)
|
5月前
|
数据采集 开发者 Python
Python异步编程:解锁高性能并发新姿势
Python异步编程:解锁高性能并发新姿势
334 133
|
5月前
|
搜索推荐 安全 BI
千人千面,权限到人:Quick BI 赋能数据嵌入业务,驱动用户体验从“要我用”到“我要用”
数据报表的价值在于“无声融入”业务流程、“精准匹配”角色需求。Quick BI增强嵌入方案支持免登安全接入、千人千面权限控制,将仪表板、表格等无缝嵌入现有系统,让数据真正“随需而见、所见即所得”,打通数据驱动落地的最后一公里。
|
5月前
|
存储 人工智能 运维
拒绝“Demo 级”架构:基于 SAE × SLS 构建 Dify 高可用生产底座
本文是Dify生产化系列第二篇,详解如何用阿里云SAE(Serverless应用引擎)与SLS(日志服务)构建弹性、免运维的AI计算底座:SAE实现秒级扩缩容与50倍QPS跃升,SLS支撑存算分离与实时业务洞察,一站式解决运维复杂、流量潮汐、数据库膨胀等核心瓶颈。
|
5月前
|
关系型数据库 MySQL PHP
phpwind_UTF8_8.5部署步骤详解(含环境准备+安装教程)
本指南详解PHPWind 8.5论坛系统的一键部署流程:从环境准备(PHP+MySQL+Web服务器)、下载解压、目录权限配置,到浏览器安装向导操作(协议同意、环境检测、数据库配置、管理员设置),最后强调删除install.php保障安全。全程新手友好,240字。
|
5月前
|
人工智能 自然语言处理 前端开发
一句话生成应用正在改变什么?2026 AI开发范式新观察
AI开发正从代码补全、模块生成迈向应用级生成:一句话描述需求,即可自动生成含前后端、数据库的可运行系统骨架。这大幅压缩启动周期,降低技术门槛,但不替代开发者,而是重塑“人定义需求、AI构建骨架”的协作范式。