不止 with open:Python 上下文管理器的高级玩法

简介: 不止 with open:Python 上下文管理器的高级玩法

不止 with open:Python 上下文管理器的高级玩法

大多数 Python 开发者都熟悉 with open('file.txt') as f: 这样的用法,但上下文管理器(Context Manager)的能力远不止自动关闭文件。它实际上是资源管理的利器,能让你写出更优雅、更安全的代码。

不仅仅是文件操作

除了文件,上下文管理器广泛应用于:

  • 数据库连接(自动提交/回滚)
  • 线程锁的自动获取与释放
  • 临时配置的修改与恢复
  • 代码执行时间的测量

使用 contextlib 简化创建

Python 的 contextlib 模块让创建上下文管理器变得简单。使用 @contextmanager 装饰器,你可以用生成器函数快速定义一个:

from contextlib import contextmanager
import time

@contextmanager
def timer():
    start = time.time()
    try:
        yield
    finally:
        print(f"耗时: {time.time() - start:.2f}秒")

with timer():
    # 执行需要计时的代码
    time.sleep(1)

实际应用示例

设想一个需要临时修改当前目录的场景:

@contextmanager
def temporary_dir(path):
    import os
    original = os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(original)

with temporary_dir("/tmp"):
    # 在此处操作文件都会在 /tmp 目录下进行
    print("当前目录已临时切换")

上下文管理器的核心价值在于确保资源被正确释放,无论代码块中是否发生异常。这种模式遵循了 Python 的“请求宽恕比请求许可更容易”哲学,让资源管理代码更加简洁可靠。

掌握上下文管理器的高级用法,不仅能提升代码的健壮性,还能让代码逻辑更清晰——这是 Pythonic 编程的重要一步。

相关文章
|
28天前
|
存储 缓存 API
用Python装饰器优雅实现函数缓存
用Python装饰器优雅实现函数缓存
204 135
|
3天前
|
数据采集 API 数据处理
Python异步编程:告别阻塞,拥抱高效
Python异步编程:告别阻塞,拥抱高效
186 136
|
1月前
|
缓存 监控 开发工具
用 Python 的 LRU Cache 优化函数性能
用 Python 的 LRU Cache 优化函数性能
231 143
|
1月前
|
测试技术 开发者 Python
Python装饰器:让代码优雅复用的魔法
Python装饰器:让代码优雅复用的魔法
236 135
|
28天前
|
Python
Python f-string:让字符串格式化变得优雅简洁
Python f-string:让字符串格式化变得优雅简洁
244 138
|
28天前
|
开发者 Python
Python异常处理:如何优雅地捕获与传递错误
Python异常处理:如何优雅地捕获与传递错误
199 136
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
超越规则:AI模型如何学会“思考”?
超越规则:AI模型如何学会“思考”?
208 142
|
7天前
|
测试技术 Python
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
194 140
|
18天前
|
存储 Go
掌握Go Context:优雅控制并发
掌握Go Context:优雅控制并发
183 139
|
18天前
|
存储 Cloud Native Go
Go Context:高效并发控制的核心利器
Go Context:高效并发控制的核心利器
213 138