当前位置: 首页 > ai >正文

Python之with语句

文章目录

  • Python中的`with`语句详解
    • 一、基本语法
    • 二、工作原理
    • 三、文件操作中的`with`语句
      • 1. 基本用法
      • 2. 同时打开多个文件
    • 四、`with`语句的优势
    • 五、自定义上下文管理器
      • 1. 基于类的实现
      • 2. 使用`contextlib`模块
    • 六、常见应用场景
    • 七、注意事项

Python中的with语句详解

with语句是Python中用于资源管理的关键语句,它简化了异常处理中资源分配和释放的操作,特别是对于文件操作、数据库连接、线程锁等需要明确释放资源的场景。

一、基本语法

with expression [as variable]:with-block

二、工作原理

with语句背后的工作机制依赖于上下文管理器协议,即实现了__enter__()__exit__()方法的对象。

  1. 执行expression,获取上下文管理器对象
  2. 调用上下文管理器的__enter__()方法
  3. 如果有as variable,则将__enter__()的返回值赋给variable
  4. 执行with-block中的代码
  5. 无论是否发生异常,都会调用上下文管理器的__exit__()方法

三、文件操作中的with语句

1. 基本用法

with open('example.txt', 'r') as file:content = file.read()# 不需要手动调用file.close()

2. 同时打开多个文件

with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:content = infile.read()outfile.write(content.upper())

四、with语句的优势

  1. 自动资源管理:确保文件等资源被正确关闭
  2. 异常安全:即使在with块中发生异常,资源也会被正确释放
  3. 代码简洁:减少了try-finally块的嵌套
  4. 可读性强:明确显示了资源的生命周期

五、自定义上下文管理器

1. 基于类的实现

class MyContextManager:def __enter__(self):print("进入上下文")return self  # 可以返回其他对象def __exit__(self, exc_type, exc_val, exc_tb):print("退出上下文")if exc_type:  # 如果有异常发生print(f"异常类型: {exc_type}")print(f"异常值: {exc_val}")# 返回True表示异常已被处理,False或None会向上传播异常return Truewith MyContextManager() as cm:print("在上下文中")# 1/0  # 取消注释会触发异常

2. 使用contextlib模块

from contextlib import contextmanager@contextmanager
def my_context_manager():print("进入上下文")try:yield "资源对象"  # yield前的代码相当于__enter__finally:print("退出上下文")  # yield后的代码相当于__exit__with my_context_manager() as resource:print(f"正在使用 {resource}")

六、常见应用场景

  1. 文件操作:自动关闭文件
  2. 数据库连接:自动提交/回滚事务并关闭连接
  3. 线程锁:自动获取和释放锁
  4. 临时修改:临时修改系统参数后恢复
  5. 计时操作:自动记录代码块执行时间
# 计时器示例
import time
from contextlib import contextmanager@contextmanager
def timer():start = time.time()try:yieldfinally:end = time.time()print(f"耗时: {end - start:.2f}秒")with timer():# 需要计时的代码time.sleep(1)

七、注意事项

  1. with语句中的变量只在with块内有效
  2. 某些资源(如sys.stdin)不支持with语句
  3. 当需要长期保持资源打开时,不应使用with语句
  4. __exit__方法应该正确处理异常或返回True来抑制异常

with语句是Python中编写干净、安全代码的重要工具,合理使用可以显著提高代码的健壮性和可维护性。

http://www.xdnf.cn/news/5980.html

相关文章:

  • 高级 Java 锁技术:超越基本同步
  • 应用探析|千眼狼PIV测量系统在职业病防治中的应用
  • idea2021创建web项目及其整合tomcat
  • RuoYi-Cloud
  • CodeBuddy 中国版 Cursor 实战:Redis+MySQL双引擎驱动〈王者荣耀〉战区排行榜
  • 阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷
  • 中国区adsense接收pin码,身份验证和地址验证指南
  • AD Class创建与Class应用
  • 求由无穷串构成的二进制数的值
  • 初始“协议”
  • IPD流程实战:产品开发各阶段目标、关注点和交付
  • 基于概率论与数理统计的股市预测模型研究
  • WHAT - 《成为技术领导者》思考题(第九章)
  • 【漫话机器学习系列】256.用 k-NN 填补缺失值
  • LeetCode热题100--206.反转链表--简单
  • 捌拾肆- 量子傅里叶变换 (2)
  • 编译docker版openresty
  • MySQL——数据类型表的约束
  • 无线定位之四 SX1302 网关源码 thread_jit 线程详解
  • 道通EVO MAX系列无人机-支持二次开发
  • Springboot实现重试机制
  • 工具学习_VirusTotal使用
  • 集成钉钉消息推送功能
  • 软件I2C
  • python3:文件与异常
  • JSON 和 cJSON 库入门教程
  • SPI接口:原理;从设备slave如何主动给主设备master发数据?
  • 基于MNIST数据集的手写数字识别(简单全连接网络)
  • 共享代理IP带宽受限影响大吗
  • SQL:MySQL函数:数学函数(Mathematical Functions)