聊聊Python中的上下文管理器:with语句背后的秘密
用Python的人对with open()肯定不陌生。但你知道with语句背后是怎么工作的吗这篇文章用最短的篇幅讲清楚。上下文管理器是什么简单说上下文管理器就是实现了__enter__和__exit__两个方法的对象。pythonclass MyContext: def __enter__(self): print(进入上下文) return self def __exit__(self, exc_type, exc_val, exc_tb): print(退出上下文) return False # False表示不屏蔽异常 with MyContext() as ctx: print(执行代码) # 输出 # 进入上下文 # 执行代码 # 退出上下文为什么需要它最常见的场景是资源管理——文件、数据库连接、锁等用完后需要释放或关闭。python# 不用with手动管理 f open(file.txt, r) try: data f.read() finally: f.close() # 用with自动管理 with open(file.txt, r) as f: data f.read() # 文件自动关闭contextlib模块的便捷方式用contextmanager装饰器可以把一个函数变成上下文管理器pythonfrom contextlib import contextmanager contextmanager def timer(): import time start time.perf_counter() try: yield finally: elapsed time.perf_counter() - start print(f耗时: {elapsed:.3f}秒) with timer(): # 执行你想计时的代码 sum(range(1000000)) # 输出: 耗时: 0.023秒实际应用场景数据库事务pythoncontextmanager def transaction(conn): try: yield conn conn.commit() except Exception: conn.rollback() raise with transaction(db_conn) as conn: conn.execute(INSERT INTO users ...)临时切换目录pythoncontextmanager def chdir(path): import os old_cwd os.getcwd() os.chdir(path) try: yield finally: os.chdir(old_cwd) with chdir(/tmp): # 在/tmp目录下执行操作 os.listdir(.)小结上下文管理器的本质就是自动化的try/finally。它让资源管理变得优雅避免了忘记释放资源导致的泄露问题。如果你在写一个需要获取-使用-释放的组件考虑用上下文管理器封装一下会让调用者的代码干净很多。

相关新闻

C++面向对象编程:从类与对象到封装与内存布局

C++面向对象编程:从类与对象到封装与内存布局

1. 从“过程”到“对象”:为什么我们需要类和对象?如果你是从C语言或者纯过程式编程转过来的,第一次接触“类”和“对象”这两个词,可能会觉得有点抽象,甚至觉得有点“多此一举”。毕竟,用结构体&#xff0…

2026/10/14 5:38:29 阅读更多 →
开源AI解决方案:IOC架构与图像搜索实践

开源AI解决方案:IOC架构与图像搜索实践

1. 项目概述在人工智能技术快速发展的今天,越来越多的开发者开始尝试构建自己的AI应用。然而,从零开始开发一个完整的AI解决方案往往需要投入大量时间和资源,特别是在图像识别、搜索等专业领域。这就是为什么我们需要关注那些已经经过实战检验…

2026/10/2 12:33:34 阅读更多 →
Windows下载、安装godot-4.7.1-stable(附安装包Godot_v4.7.1-stable_win64.exe.zip)

Windows下载、安装godot-4.7.1-stable(附安装包Godot_v4.7.1-stable_win64.exe.zip)

文章目录1. Godot Engine 简介2. 4.7.1-stable 版本亮点渲染与图形编辑器平台支持3. 获取安装包4. 快速开始1. Godot Engine 简介 Godot Engine 是一款完全免费、开源的跨平台游戏引擎,在 MIT 许可证下发布。它提供了一个统一的编辑界面,支持 2D 和 3D …

2026/10/11 7:08:34 阅读更多 →

最新新闻

Claude Code接入DeepSeek完整教程:从安装配置到实战排错

Claude Code接入DeepSeek完整教程:从安装配置到实战排错

年初我折腾过一段时间的命令行AI编程助手,最后把我的Claude Code跑到了DeepSeek的模型上,从安装到配通花了不到半小时,后面连续几周写脚本、改代码都在用它。这篇东西就是当时的完整记录:Claude Code是什么、为什么能和DeepSeek组…

2026/10/14 5:38:15 阅读更多 →
八大数据结构核心原理与工程选型实战

八大数据结构核心原理与工程选型实战

面试和工作里卡住人的,往往不是算法题,而是数据结构的基础没吃透。数组、链表、栈、队列、哈希表、树、堆、图这八种常见结构,几乎覆盖了平时业务开发和面试问题里九成以上的场景。它们单独看都不难,难的是知道“什么时候用哪个”…

2026/10/14 5:38:15 阅读更多 →
ClickHouse大数据分析实战:安装、优化与应用

ClickHouse大数据分析实战:安装、优化与应用

1. ClickHouse 初探:为什么它成为大数据分析的宠儿第一次接触 ClickHouse 是在处理一个日增 10TB 的日志分析项目时。当时我们尝试了各种传统方案,直到遇见这个开源的列式数据库,查询性能直接提升了 20 倍。作为 Yandex 为自家流量分析开发的…

2026/10/14 5:38:15 阅读更多 →
open-falcon transfer多重备份:监控数据链路高可用改造实践

open-falcon transfer多重备份:监控数据链路高可用改造实践

1. 先说清楚 transfer 到底是干什么的有段时间我特别怕半夜听见手机震动。不是怕报警,是怕监控系统自己先挂了,那感觉就像是自己家装的摄像头,结果贼来了它先断电了。做运维的人应该都懂这种憋屈:大盘上所有机器一片绿&#xff0c…

2026/10/14 5:38:15 阅读更多 →
高跟鞋检测数据集实战:YOLO标注格式解析与训练避坑指南

高跟鞋检测数据集实战:YOLO标注格式解析与训练避坑指南

简介:本资源为面向目标检测学习者的女士高跟鞋检测数据集,适用于YOLO系列模型的训练与验证,可支撑服饰识别、电商图像分析等场景的入门与进阶实践。压缩包共552个文件,包含276张jpg图像与276个xml标注文件,一一对应&am…

2026/10/14 5:38:15 阅读更多 →
DCGAN数据增强实战:从原理到替换数据集避坑指南

DCGAN数据增强实战:从原理到替换数据集避坑指南

简介:这份资源是DCGAN在TensorFlow框架下的完整实现,面向希望将生成对抗网络用于图像增强与扩充的开发者与研究者,尤其适合医学影像、人脸识别等小样本场景。代码已跑通,替换data文件夹中的图像数据集即可直接使用,对X…

2026/10/14 5:37:15 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →