掌握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字)

目录
相关文章
|
9月前
|
存储 Python 容器
简化Python类:使用数据类(dataclasses)
简化Python类:使用数据类(dataclasses)
650 18
|
9月前
|
SQL 存储 关系型数据库
SQLAlchemy 技术入门指南
SQLAlchemy 是 Python 最流行的 ORM 工具包,提供 Core(SQL 表达式语言)和 ORM(对象关系映射)双模式。它 bridging Python 与 SQL,支持多数据库、连接池、事务及关系映射,兼具灵活性与企业级能力,学习曲线平缓,适合从入门到高阶应用。(239字)
782 10
|
8月前
|
人工智能 安全 JavaScript
【OpenClaw小龙虾饱满级教程】1分钟阿里云/本地部署配置免费API+10个必装Skill及常见问题解答
OpenClaw部署完成、模型配置就绪,却卡在了技能选择环节?打开ClawHub技能市场,13729个技能密密麻麻排列,从编程工具到图像生成,从浏览器自动化到深度研究,让人眼花缭乱。事实上,90%的技能对普通用户而言形同虚设,只有10%的“基础设施级”技能,能让OpenClaw真正从“聊天工具”升级为“能打能干活”的AI助手。
2722 1
|
Java API Android开发
Android TV 开发之 TV视频播放器(上)
Android TV 开发之 TV视频播放器(上)
1533 0
Android TV 开发之 TV视频播放器(上)
|
9月前
|
存储 人工智能 运维
拒绝“Demo 级”架构:基于 SAE × SLS 构建 Dify 高可用生产底座
本文是Dify生产化系列第二篇,详解如何用阿里云SAE(Serverless应用引擎)与SLS(日志服务)构建弹性、免运维的AI计算底座:SAE实现秒级扩缩容与50倍QPS跃升,SLS支撑存算分离与实时业务洞察,一站式解决运维复杂、流量潮汐、数据库膨胀等核心瓶颈。
|
9月前
|
弹性计算 小程序 固态存储
云服务器租用价格多少钱一年?用于搭建小程序费用清单,2026最新整理
2026年阿里云小程序服务器最新报价:入门级2核2G轻量服务器低至38元/年(含200M峰值带宽、50G系统盘),99元/年ECS经济型实例续费同价;香港地域25元/月起。覆盖GPU、按量付费及带宽/云盘明细,性价比高,适合个人开发者与中小企业快速部署小程序。
2200 17
|
9月前
|
存储 人工智能 弹性计算
玄晶引擎2.7.6技术拆解+阿里云生态实战略:春节前企业级自动化运营升级指南
玄晶引擎2.7.6版本春节前重磅升级,聚焦RPA非侵入式自动化、AI智能文案(支持通义千问+OSS知识库)、精准获客(挂定位/留痕/私信详情)三大方向,深度适配阿里云ECS、OSS、RDS、SLS等核心服务,助力企业降本增效、安全合规落地。
544 14
|
9月前
|
关系型数据库 MySQL PHP
phpwind_UTF8_8.5部署步骤详解(含环境准备+安装教程)
本指南详解PHPWind 8.5论坛系统的一键部署流程:从环境准备(PHP+MySQL+Web服务器)、下载解压、目录权限配置,到浏览器安装向导操作(协议同意、环境检测、数据库配置、管理员设置),最后强调删除install.php保障安全。全程新手友好,240字。
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
不卷通用大模型,网易AI的“错位”生存法则
网易AI战略简介(240字内): 马年红包大战烧钱45亿,网易却选择“避战”——不卷通用大模型,不砸钱抢流量。依托1400亿现金与年超177亿元研发,聚焦游戏、教育、音乐等垂类,打造“最懂游戏的AI专家”:AI覆盖90%美术流程、提效300%;《逆水寒》AI门客、《蛋仔》AI建模重塑交互;技术外溢至具身智能机器人、企业Agent及个人助理LobsterAI。务实走“应用先行—能力固化—场景外溢”路径,以实用主义破AI焦虑。
642 11

热门文章

最新文章