聊聊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/7/26 4:07:42 阅读更多 →
开源AI解决方案:IOC架构与图像搜索实践

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

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

2026/7/26 4:06:42 阅读更多 →
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/7/26 4:06:42 阅读更多 →

最新新闻

Docker实战:从容器化到编排的完整指南

Docker实战:从容器化到编排的完整指南

1. 项目概述"从一键部署到一地鸡毛"这个标题精准概括了大多数Docker初学者的真实心路历程。作为一个从业多年的容器技术实践者,我见过太多团队在容器化转型过程中经历的起起落落。这篇文章将完整复盘一个典型Docker项目的完整生命周期,从最初的…

2026/7/26 4:17:47 阅读更多 →
多模态预训练模型:动态路由与对比学习实践

多模态预训练模型:动态路由与对比学习实践

1. 多模态预训练的技术背景与核心价值计算机视觉和自然语言处理这两个领域在过去十年里各自取得了突破性进展,但如何让机器像人类一样同时理解图像和文字,一直是AI研究的前沿课题。Yann LeCun和谢赛宁团队的最新研究,正是瞄准了这个关键痛点。…

2026/7/26 4:17:47 阅读更多 →
键盘开机功能详解:从BIOS设置到高级应用完整指南

键盘开机功能详解:从BIOS设置到高级应用完整指南

你有没有遇到过这样的情况:深夜加班到很晚,电脑已经关机,但需要快速开机处理一个紧急任务,却不想弯腰去按机箱上那个小小的电源按钮?或者你的电脑主机放在桌子底下,每次开机都要费劲地摸索电源键&#xff1…

2026/7/26 4:17:47 阅读更多 →
基于CC2520 Basic RF的无线通信开发:从芯片手册到实战应用

基于CC2520 Basic RF的无线通信开发:从芯片手册到实战应用

1. 项目概述:从芯片手册到可运行的无线节点如果你手头正好有几片TI的CC2520射频收发器芯片,并且想快速验证一个简单的点对点无线通信链路,那么官方提供的这套软件示例(SWRU137B)绝对是你绕不开的起点。CC2520是一颗完全…

2026/7/26 4:17:47 阅读更多 →
HART协议详解:00 为什么工业世界仍然需要HART?

HART协议详解:00 为什么工业世界仍然需要HART?

第0季 为什么工业世界仍然需要HART? ——一根两芯线里的工业智能进化史(开篇定位季) 各位工业现场的工程师朋友们,大家好! 在深入HART协议的技术细节之前,我们先来回答一个许多人初次接触时都会产生的核…

2026/7/26 4:17:47 阅读更多 →
掌握控制台指令:提升开发与运维效率的关键技能

掌握控制台指令:提升开发与运维效率的关键技能

1. 控制台指令:开发者与运维人员的瑞士军刀作为一个在系统管理和开发领域摸爬滚打多年的老手,我深知控制台指令的重要性。无论是Windows的CMD/PowerShell还是Linux的Terminal,这些看似简单的命令行工具实则是效率的倍增器。记得刚入行时&…

2026/7/26 4:16:46 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻