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

目录
相关文章
|
5天前
|
JSON 人工智能 API
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
`comfyui_xy` 是一个轻量级 Python 客户端库,封装 ComfyUI API,支持一键上传图片/遮罩、动态修改工作流、自动排队执行与结果下载(图/视/音频)。安装即用,无需处理底层 HTTP/WebSocket 细节,助力 AIGC 自动化开发。开源免费,PyPI 可装。
267 127
|
20天前
|
Go 开发者 微服务
Go错误处理:从`if err != nil`到清晰代码
Go错误处理:从`if err != nil`到清晰代码
228 137
|
27天前
|
SQL 安全 数据库
SQL注入:从登录框到数据泄露的十分钟
SQL注入:从登录框到数据泄露的十分钟
216 140
|
4天前
|
数据采集 运维 数据挖掘
《分布式跨域业务事务可用性与性能度量手册》
本文聚焦分布式系统中跨数十服务的业务事务,提出一套脱离单点指标局限的全域度量体系。文章从语义锚定与边界切片完成事务定义,构建以稳态存续度、断层自愈率为核心的可用性评估模型,提出流转时延熵、节点协同滞涩度衡量整体性能,通过事务态画像与趋势推演因子实现数据落地,并强调度量体系需动态域校准与弹性适配。全文结合实践思考,阐述跨服务业务事务可用性与性能的深度度量方法,为分布式系统优化提供可落地的技术思路。
179 133
|
5天前
|
Python
Python装饰器:给函数“穿外套”的优雅艺术
Python装饰器:给函数“穿外套”的优雅艺术
208 142
|
20天前
|
Go 调度 开发者
实战Go并发模型:轻量级协程的高效应用
实战Go并发模型:轻量级协程的高效应用
223 145
|
5天前
|
API 开发者 C++
用Python的FastAPI框架,5分钟搭建高性能API
用Python的FastAPI框架,5分钟搭建高性能API
215 139
|
20天前
|
数据采集 Cloud Native 安全
Go并发编程:goroutine与channel实战
Go并发编程:goroutine与channel实战
184 134
|
5天前
|
设计模式 监控 测试技术
如何优雅地使用Python装饰器提升代码可读性
如何优雅地使用Python装饰器提升代码可读性
174 137
|
15天前
|
消息中间件 监控 物联网
领航智联时代:阿里云 MQTT+Kafka 车/物联网实时数据分析解决方案
该解决方案深度整合移动端/设备端连接利器 MQTT 与大数据流处理核心引擎 Kafka,为车联网及物联网行业提供高可靠、高性能、极简运维的数据处理链路。
265 137