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

目录
相关文章
|
3月前
|
人工智能 JavaScript Linux
【最新版养 AI龙虾🦞指南】零基础 OpenClaw 阿里云/本地部署、配置、使用保姆级教程
OpenClaw(原Clawdbot,曾用名Moltbot)作为一款开源轻量级AI自动化代理工具,2026年版本在部署灵活性、功能兼容性上实现重大升级,核心优势在于“自然语言驱动+全流程任务自动化”,无需手动编写脚本,仅需输入口语化指令,即可完成文档处理、日程管理、文件读写、跨工具协同、代码生成等各类重复性工作,被广泛应用于个人办公、新手开发、轻量团队协作等场景,堪称“私人AI员工”。
1575 92
|
4月前
|
存储 Python 容器
简化Python类:使用数据类(dataclasses)
简化Python类:使用数据类(dataclasses)
420 18
|
4月前
|
SQL 存储 关系型数据库
SQLAlchemy 技术入门指南
SQLAlchemy 是 Python 最流行的 ORM 工具包,提供 Core(SQL 表达式语言)和 ORM(对象关系映射)双模式。它 bridging Python 与 SQL,支持多数据库、连接池、事务及关系映射,兼具灵活性与企业级能力,学习曲线平缓,适合从入门到高阶应用。(239字)
422 10
|
Java API Android开发
Android TV 开发之 TV视频播放器(上)
Android TV 开发之 TV视频播放器(上)
1412 0
Android TV 开发之 TV视频播放器(上)
|
4月前
|
弹性计算 小程序 固态存储
云服务器租用价格多少钱一年?用于搭建小程序费用清单,2026最新整理
2026年阿里云小程序服务器最新报价:入门级2核2G轻量服务器低至38元/年(含200M峰值带宽、50G系统盘),99元/年ECS经济型实例续费同价;香港地域25元/月起。覆盖GPU、按量付费及带宽/云盘明细,性价比高,适合个人开发者与中小企业快速部署小程序。
1485 17
|
4月前
|
存储 人工智能 运维
拒绝“Demo 级”架构:基于 SAE × SLS 构建 Dify 高可用生产底座
本文是Dify生产化系列第二篇,详解如何用阿里云SAE(Serverless应用引擎)与SLS(日志服务)构建弹性、免运维的AI计算底座:SAE实现秒级扩缩容与50倍QPS跃升,SLS支撑存算分离与实时业务洞察,一站式解决运维复杂、流量潮汐、数据库膨胀等核心瓶颈。
|
4月前
|
关系型数据库 MySQL PHP
phpwind_UTF8_8.5部署步骤详解(含环境准备+安装教程)
本指南详解PHPWind 8.5论坛系统的一键部署流程:从环境准备(PHP+MySQL+Web服务器)、下载解压、目录权限配置,到浏览器安装向导操作(协议同意、环境检测、数据库配置、管理员设置),最后强调删除install.php保障安全。全程新手友好,240字。
|
4月前
|
人工智能 弹性计算 自然语言处理
2026年阿里云部署OpenClaw(Clawdbot)一键接入WhatsApp喂饭级教程
2026年,OpenClaw(前身为Clawdbot、Moltbot)凭借开源轻量化架构、跨平台无缝适配能力及强大的AI自动化执行功能,成为个人、跨境团队及中小企业搭建专属AI助手的首选工具。其核心优势在于无需复杂开发,即可快速对接WhatsApp等全球主流通信平台,实现“WhatsApp发送自然语言指令→阿里云服务器运行OpenClaw执行任务→结果实时反馈至WhatsApp”的闭环,适配跨境沟通、客户服务、远程协作、日常办公等多场景,彻底打破“AI工具与日常沟通脱节”的痛点。
869 5
|
4月前
|
人工智能 自然语言处理 前端开发
一句话生成应用正在改变什么?2026 AI开发范式新观察
AI开发正从代码补全、模块生成迈向应用级生成:一句话描述需求,即可自动生成含前后端、数据库的可运行系统骨架。这大幅压缩启动周期,降低技术门槛,但不替代开发者,而是重塑“人定义需求、AI构建骨架”的协作范式。

热门文章

最新文章