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

目录
相关文章
|
26天前
|
Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
257 151
|
15天前
|
PHP
PHP技巧分享:提升开发效率的5个小妙招
PHP技巧分享:提升开发效率的5个小妙招
188 128
|
15天前
|
PHP
PHP开发中的5个实用技巧,让你的代码更优雅
PHP开发中的5个实用技巧,让你的代码更优雅
166 134
|
15天前
|
大数据 PHP
5个提升开发效率的PHP实用技巧
5个提升开发效率的PHP实用技巧
197 136
|
1月前
|
Python
Python装饰器:给函数“穿外套”的优雅艺术
Python装饰器:给函数“穿外套”的优雅艺术
229 142
|
1月前
|
Java 应用服务中间件 Shell
Apache Tomcat 历史版本下载地址 官网地址
本指南详解Tomcat (以7.0.67为例)的完整部署流程:从官网下载历史版本、解压安装,到启动/停止服务(startup.sh/shutdown.sh),再到配置开机自启(systemctl)。涵盖目录结构说明及端口验证方法,适合Linux服务器快速部署。
323 134
|
7天前
|
Java API 开发者
Java开发中的几个实用小技巧
Java开发中的几个实用小技巧
320 139
|
2天前
|
Java 开发者
Java异常处理中的性能陷阱:别让基础拖垮你的应用
Java异常处理中的性能陷阱:别让基础拖垮你的应用
281 137
|
2天前
|
PHP
PHP 8 新特性:让代码更优雅的四个技巧
PHP 8 新特性:让代码更优雅的四个技巧
171 76
|
15天前
|
存储 编译器 Go
Go语言实用技巧:空结构体的妙用
Go语言实用技巧:空结构体的妙用
194 136

热门文章

最新文章